2012-03-28 15 views
53

Come fare?Rileva l'evento backspace e del delta "input"?

ho provato:

var key = event.which || event.keyCode || event.charCode; 

if(key == 8) alert('backspace'); 

ma non funziona ...

Se lo faccio lo stesso sull'evento pressione dei tasti funziona, ma io non voglio usare pressione di un tasto perché emette il carattere digitato nel mio campo di input. Ho bisogno di essere in grado di controllare che


il mio codice:

$('#content').bind('input', function(event){ 

    var text = $(this).val(), 
     key = event.which || event.keyCode || event.charCode; 

    if(key == 8){ 
     // here I want to ignore backspace and del 
    } 

    // here I'm doing my stuff 
    var new_text = 'bla bla'+text; 
    $(this).val(new_text); 
    }); 

nessun personaggio dovrebbe essere aggiunto nel mio ingresso, oltre a quello che sto aggiungendo con val() in realtà l'input dal l'utente dovrebbe essere completamente ignorato, per me è importante solo la pressione del tasto.

+2

In realtà non c'è bisogno di fare l'or'ing - event.which è bene, jQuery normalizza l'oggetto evento per voi. Vedi http://api.jquery.com/category/events/event-object/ – Niko

+0

Dovresti inserire il nome dell'evento come primo argomento di ".bind', non un selettore. Dovrebbe essere '$ ('content'). Bind ('keypress', ...' – pmrotule

risposta

68

Utilizzare .onkeydown e annullare la rimozione con return false;. Come questo:

var input = document.getElementById('myInput'); 

input.onkeydown = function() { 
    var key = event.keyCode || event.charCode; 

    if(key == 8 || key == 46) 
     return false; 
}; 

O con jQuery, perché si è aggiunto un tag jQuery alla tua domanda:

jQuery(function($) { 
    var input = $('#myInput'); 
    input.on('keydown', function() { 
    var key = event.keyCode || event.charCode; 

    if(key == 8 || key == 46) 
     return false; 
    }); 
}); 

+13

E se volessi prendere input da un clic destro> incolla? – ctb

+2

' 'keydown'' non funziona in Chrome Android, restituisce vuoto quando si fa clic su backspace o del – Kosmetika

+1

In funzione dobbiamo mantenere l'evento come parametro quindi funzionerà solo come funzione (evento) (evento) ------------------- ------- var input = document.getElementById ('myInput'); input.onkeydown = function (evento) { var key = event.keyCode || event.charCode; if (ke y == 8 || tasto == 46) return false; }; –

3

Hai provato a utilizzare "onkeydown"? Questo è l'evento che stai cercando.

Funziona prima dell'inserimento dell'ingresso e consente di annullare l'immissione del carattere.

+0

ma come posso cancellarlo? Perché sto usando val() sull'input e aggiunge ancora il carattere digitato – Alex

+2

event.preventDefault() '? – Niko

+0

Puoi semplicemente" restituire false; "per annullare qualsiasi evento quando usi jQuery. – iMoses

9

Con jQuery

Il event.which La proprietà normalizza event.keyCode ed event.charCode. Si raccomanda di guardare event.which per l'input da tastiera.

http://api.jquery.com/event.which/

jQuery('#input').on('keydown', function(e) { 
    if(e.which == 8 || e.which == 46) return false; 
}); 
+1

Utilizzo jQuery da molto tempo, ma non ho visto questo. Sempre buono per imparare qualcosa di nuovo. +1! – Sablefoste

1
$('div[contenteditable]').keydown(function(e) { 
// trap the return key being pressed 
if (e.keyCode === 13 || e.keyCode === 8) 
{ 
    return false; 
} 
}); 
+1

Codice chiave 13 per "Invio" –

+1

Codice chiave 8 per "BackSpace" –

0

event.key === "Backspace"

più recente e molto più pulito: usare event.key. Niente più codici di numeri arbitrari!

input.addEventListener('keydown', function(event) { 
    const key = event.key; // const {key} = event; ES6+ 
    if (key === "Backspace" || key === "Delete") { 
     return false; 
    } 
}); 

Mozilla Docs

Supported Browsers

0

keydown con event.key === "Backspace" or "Delete"

più recente e molto più pulito: utilizzare event.key. Niente più codici di numeri arbitrari!

input.addEventListener('keydown', function(event) { 
    const key = event.key; // const {key} = event; ES6+ 
    if (key === "Backspace" || key === "Delete") { 
     return false; 
    } 
}); 

Mozilla Docs

Supported Browsers