Jak to zrobić?
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, zadziała, ale nie chcę używać klawisza, ponieważ wyświetla wpisany znak w moim polu wejściowym. Muszę być w stanie to kontrolować
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 nie powinien być dodawany do mojego wpisu, poza tym, co dodam za pomocą val () w rzeczywistości wejście od użytkownika powinno być całkowicie ignorowane, tylko naciśnięcie klawisza jest dla mnie ważne
javascript
jquery
Alex
źródło
źródło
.bind
, a nie selektor. Powinien być$('content').bind('keypress', ...
Odpowiedzi:
Użyj
.onkeydown
i anuluj usuwanie za pomocąreturn false;
. Lubię to:var input = document.getElementById('myInput'); input.onkeydown = function() { var key = event.keyCode || event.charCode; if( key == 8 || key == 46 ) return false; };
Lub z jQuery, ponieważ dodałeś tag jQuery do swojego pytania:
jQuery(function($) { var input = $('#myInput'); input.on('keydown', function() { var key = event.keyCode || event.charCode; if( key == 8 || key == 46 ) return false; }); });
Wcześniejsze
źródło
keydown
nie działa w Chrome na Androida, zwraca pustkę po kliknięciu backspace lub delenter
ibackspace
klawisze nainput
zdarzeniach, a te naciśnięcia klawiszy do tego nie docierająDzięki jQuery
Właściwość event.which normalizuje event.keyCode i event.charCode. Zaleca się obserwowanie zdarzenia, które jest przeznaczone do wprowadzania danych za pomocą klawiatury.
http://api.jquery.com/event.which/
jQuery('#input').on('keydown', function(e) { if( e.which == 8 || e.which == 46 ) return false; });
źródło
event.key === "Backspace"
Nowsze i znacznie czystsze: użyj
event.key
. Nigdy więcej dowolnych kodów liczbowych!input.addEventListener('keydown', function(event) { const key = event.key; // const {key} = event; ES6+ if (key === "Backspace" || key === "Delete") { return false; } });
Dokumenty Mozilli
Obsługiwane przeglądarki
źródło
Czy próbowałeś użyć „onkeydown”? To jest wydarzenie, którego szukasz.
Działa przed wstawieniem wejścia i umożliwia anulowanie wprowadzania znaków.
źródło
event.preventDefault()
?return false;
anulować dowolne zdarzenie podczas korzystania z jQuery.To stare pytanie, ale jeśli chcesz przechwycić zdarzenie backspace przy wejściu, a nie keydown, keypress lub keyup - jak zauważyłem, każda z tych funkcji przerywa niektóre napisane przeze mnie funkcje i powoduje niewygodne opóźnienia dzięki automatycznemu formatowaniu tekstu —Możesz złapać backspace za pomocą inputType:
document.getElementsByTagName('input')[0].addEventListener('input', function(e) { if (e.inputType == "deleteContentBackward") { // your code here } });
źródło
keydown
zevent.key === "Backspace" or "Delete"
Nowsze i znacznie czystsze: użyj
event.key
. Nigdy więcej dowolnych kodów liczbowych!input.addEventListener('keydown', function(event) { const key = event.key; // const {key} = event; ES6+ if (key === "Backspace" || key === "Delete") { return false; } });
Nowoczesny styl:
input.addEventListener('keydown', ({key}) => { if (["Backspace", "Delete"].includes(key)) { return false } })
Dokumenty Mozilli
Obsługiwane przeglądarki
źródło
$('div[contenteditable]').keydown(function(e) { // trap the return key being pressed if (e.keyCode === 13 || e.keyCode === 8) { return false; } });
źródło
//Here's one example, not sure what your application is but here is a relevant and likely application function addDashesOnKeyUp() { var tb = document.getElementById("tb1"); var key = event.which || event.keyCode || event.charCode; if((tb.value.length ==3 || tb.value.length ==7 )&& (key !=8) ) { tb.value += "-" } }
źródło
na urządzeniach z Androidem korzystających z przeglądarki Chrome nie możemy wykryć cofnięcia. Możesz zastosować obejście tego problemu:
var oldInput = '', newInput = ''; $("#ID").keyup(function () { newInput = $('#ID').val(); if(newInput.length < oldInput.length){ //backspace pressed } oldInput = newInput; })
źródło
which
ikeyCode
na 229. Musi być lepszy sposób lub lepszy sposób wkrótce, ale będę używał w zasadzie tego teraz. ..