2012-03-28 9 views
53

Jak to zrobić?Wykryj backspace i del na zdarzeniu "input"?

Próbowałem:

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

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

ale to nie działa ...

Jeśli zrobić to samo w przypadku naciśnięcia klawisza to działa, ale nie chcę używać przyciśnięcie bo nim wypisuje wpisany znak w moim polu wejściowym. Muszę być w stanie kontrolować tego


mój kod:

$('#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); 
    }); 

żaden znak powinien być dołączany w moim wejściu, oprócz co Dodaję z val() faktycznie sygnał z użytkownik powinien być całkowicie ignorowany, tylko kluczowa akcja jest dla mnie ważna.

+2

rzeczywiście nie trzeba robić or'ing - event.which jest dobrze, jQuery normalizuje obiekt zdarzenia dla Ciebie. Zobacz http://api.jquery.com/category/events/event-object/ – Niko

+0

Powinieneś umieścić nazwę zdarzenia jako pierwszy argument '.bind', a nie selektora. Powinien być '$ ('content'). Bind (" naciśnięcie klawisza ", ...' – pmrotule

Odpowiedz

68

Użyj .onkeydown i anuluj usunięcie za pomocą return false;. Tak:

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

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

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

Lub z jQuery, bo dodał tag do Twojego pytania jQuery:

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

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

+13

Co jeśli chcesz przechwycić dane wejściowe z kliknięcia prawym przyciskiem myszy> wklej? – ctb

+2

' 'keydown'' nie działa w przeglądarce Chrome Android, zwraca pustość po kliknięciu Backspace lub del – Kosmetika

+1

W funkcji musimy utrzymywać zdarzenia jako parametr, wtedy tylko zadziała jak funkcja (zdarzenie) ------------------- ------- var input = document.getElementById ('myInput'); input.onkeydown = funkcja (zdarzenie) { klawisz var = event.keyCode || event.charCode; if (ke y == 8 || klucz == 46) return false; }; –

3

Czy próbowałeś używać "onkeydown"? To jest wydarzenie, którego szukasz.

Działa przed wstawieniem wejścia i pozwala anulować wejście char.

+0

, ale jak mogę to anulować? Ponieważ używam val() na wejściu i nadal dołącza wpisany znak – Alex

+2

Jak o " event.preventDefault() '? – Niko

+0

Możesz po prostu" zwrócić fałsz ;, aby anulować dowolne zdarzenie podczas używania jQuery. " – iMoses

9

z jQuery

event.which Właściwość normalizuje kod zdarzenia.keyCode i event.charCode. Zaleca się oglądanie zdarzenia, które służy do wprowadzania za pomocą klawiatury.

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

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

Używam jQuery przez długi czas, ale nie widziałem tego. Zawsze dobrze jest uczyć się czegoś nowego. +1! – Sablefoste

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

Kod 13 dla "Enter" –

+1

Kod klucza 8 dla "Backspace" –

0

event.key === "Backspace"

Nowsze i znacznie czystsze: użyj event.key. Nie więcej arbitralnych kodów numerów!

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 z event.key === "Backspace" or "Delete"

nowsza i znacznie czystsze: użyj event.key. Nie więcej arbitralnych kodów numerów!

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

Mozilla Docs

Supported Browsers