Zastanawiam się, co robię źle:
$(".s").keypress(function(e) {
switch (e.keyCode) {
case 8: // Backspace
//console.log('backspace');
case 9: // Tab
case 13: // Enter
case 37: // Left
case 38: // Up
case 39: // Right
case 40: // Down
break;
default:
doSearch();
}
});
Chcę, aby moja doSearch()
funkcja była również uruchamiana po Backspacenaciśnięciu klawisza. W tej chwili absolutnie nic się nie dzieje, gdy naciskam Backspacew Chrome i Safari.
jakieś pomysły?
Odpowiedzi:
Użyj
keyup
zamiastkeypress
. Otrzymuje wszystkie kody kluczy, gdy użytkownik coś naciśnieźródło
keyup
strzelać do Backspace, skorokeypress
nie?keypress
doEnter
klucza,keydown
doBackspace
i tak dalej; w przeciwnym razie znajdziesz zdarzenia w niektórych przeglądarkach, które tak naprawdę nie działają zgodnie z oczekiwaniami, zwłaszcza gdy chcesz zapobiec domyślnemu zachowaniu klucza. Kiedy użyjesz niewłaściwego, wydarzy się, że albo twoje wydarzenie nie zostanie w ogóle zarejestrowane (jak w przypadku Backspace), albo nie możesz temu zapobiec; ponieważ dzieje się to już zanim kod obsługi zdarzeń do niego dotrze.keyup
spowoduje uszkodzenie klawiatury numerycznej . Czy znasz odpowiedź, która pozwala poprawnie wykryć dowolny klawisz na pełnej klawiaturze?keydown
jest lepszą opcją dla wszystkich kluczySam to spotkałem. Użyłem,
.on
więc wygląda trochę inaczej, ale zrobiłem to:Dodanie mojej pracy tutaj. Musiałem usunąć ssn wpisany przez użytkownika, więc zrobiłem to w jQuery
źródło
Jeśli chcesz uruchomić zdarzenie tylko po zmianie danych wejściowych, użyj:
źródło
input
również nie przestrzega kodów kluczowych. To też by nie działało.Zgodnie z dokumentacją jQuery dla .keypress (), nie przechwytuje ona znaków, które nie mogą być wydrukowane, więc backspace nie będzie działał po naciśnięciu klawisza, ale zostanie przechwycony podczas keydown i keyup:
W niektórych przypadkach keyup nie jest pożądany lub ma inne niepożądane efekty, a keydown jest wystarczający, więc jednym ze sposobów radzenia sobie z tym jest użycie
keydown
złapanie wszystkich naciśnięć klawiszy, a następnie ustawienie limitu czasu na krótki czas, aby wprowadzić klucz, a następnie przetworzyć odtąd.źródło