jQuery: нажатие клавиши Backspace не будет срабатывать?
мне интересно, что я делаю не так:
$('.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();
}
});
Я хочу, чтобы мои doSearch() функции также будет уволен, когда я ударил Backspace ключ. На данный момент абсолютно ничего не происходит, когда я нажимаю Backspace в Chrome и Safari.
какие идеи?
4 ответов:
использовать
keyupвместоkeypress. Это получает все ключевые коды, когда пользователь нажимает что-то
Я сам на это наткнулся. Я использовал
.onТак что это выглядит немного по-другому, но я сделал это:$('#element').on('keypress', function() { //code to be executed }).on('keydown', function(e) { if (e.keyCode==8) $('element').trigger('keypress'); });добавление моей работы здесь. Мне нужно было удалить ssn, введенный пользователем, поэтому я сделал это в jQuery
$(this).bind("keydown", function (event) { // Allow: backspace, delete if (event.keyCode == 46 || event.keyCode == 8) { var tempField = $(this).attr('name'); var hiddenID = tempField.substr(tempField.indexOf('_') + 1); $('#' + hiddenID).val(''); $(this).val('') return; } // Allow: tab, escape, and enter else if (event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || // Allow: Ctrl+A (event.keyCode == 65 && event.ctrlKey === true) || // Allow: home, end, left, right (event.keyCode >= 35 && event.keyCode <= 39)) { // let it happen, don't do anything return; } else { // Ensure that it is a number and stop the keypress if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) { event.preventDefault(); } } });
Если вы хотите запустить событие только при изменении вашего входного использования:
$('.s').bind('input', function(){ console.log("search!"); doSearch(); });
согласно документации jQuery для .keypress (), он не ловит непечатаемые символы, поэтому backspace не будет работать при нажатии клавиши, но он пойман в keydown и keyup:
событие keypress посылается элементу, когда браузер регистрирует ввод с клавиатуры. Это похоже на событие keydown, за исключением того, что модификатор и непечатающие клавиши, такие как Shift, Esc и delete, запускают события keydown, но не события нажатия клавиш. Другие различия между ними события могут возникать в зависимости от платформы и браузера. (https://api.jquery.com/keypress/)
в некоторых случаях keyup не требуется или имеет другие нежелательные эффекты, и keydown достаточно, поэтому один из способов справиться с этим-использовать
keydownчтобы поймать все нажатия клавиш, затем установите тайм-аут короткого интервала, чтобы ввести ключ, а затем выполните обработку там после.jQuery(el).keydown( function() { var that = this; setTimeout( function(){ /** Code that processes backspace, etc. **/ }, 100 ); } );
Comments