jQuery Keypress клавиши со стрелками
Я пытаюсь захватить нажатия клавиш со стрелками в jQuery, но события не вызываются.
$(function(){
$('html').keypress(function(e){
console.log(e);
});
});
это генерирует события для буквенно-цифровых клавиш, но delete, клавиши со стрелками и т. д. не генерируют события.
что я делаю неправильно, чтобы не запечатлеть?
6 ответов
вот пример: JSNIPPET DEMO keydown () vs keypress ()
вы должны использовать .keydown()
, потому что .keypress()
будет игнорировать "стрелки" , для ловли типа ключа используйте e.which
нажмите экран результатов для фокусировки (внизу справа на экране скрипки), а затем нажмите клавиши со стрелками, чтобы увидеть его работу.
Примечания:
-
.keypress()
никогда не будет запущен с Shift, Esc и Delete, но.keydown()
будет. - на самом деле
.keypress()
в некоторых браузерах будет срабатывать с помощью клавиш со стрелками, но его не кросс-браузер, так что его более надежным в использовании.keydown()
.
больше полезной информации
- можно использовать
.which
или.keyCode
объекта события-некоторые браузеры не будут поддерживать один из них, но при использовании jQuery его безопасно использовать оба, так как jQuery стандартизирует вещи. (Я предпочитаю.which
никогда не было проблем с). - в обнаружить
ctrl | alt | shift | META
нажмите с фактическим захваченным ключом вы должны проверить следующие свойства объекта события - они будут установлены в TRUE, если они были нажаты:-
event.ctrlKey
- сочетание клавиш Ctrl -
event.altKey
- alt -
event.shiftKey
- shift -
event.metaKey
- META ( команда ⌘ или клавиша Windows )
-
-
наконец - вот некоторые полезные коды ( полный список - код ключа-cheatsheet ):
- Enter: 13
- Up: 38
- вниз: 40
- направо: 39
- левый: 37
- Esc: 27
- пробел: 32
- Ctrl: 17
- Alt: 18
- Shift: 16
$(document).keydown(function(e) {
console.log(e.keyCode);
});
события нажатия клавиши обнаружить клавиши со стрелками, но не во всех браузерах. Поэтому лучше использовать keydown.
Это коды ключей, которые вы должны получать в своем журнале консоли:
- налево = 37
- up = 38
- направо = 39
- вниз = 40
вы можете проверить, нажата ли клавиша со стрелкой:
$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41)
alert( "arrowkey pressed" );
});
пожалуйста, обратитесь по ссылке из JQuery
http://api.jquery.com/keypress/
Он говорит:
событие keypress посылается элементу, когда браузер регистрирует ввод с клавиатуры. Это похоже на событие keydown, за исключением модификатора и непечатаемых ключей, таких как Shift, Esc и delete trigger keydown, но не события нажатия клавиш. Другие различия между двумя событиями могут возникнуть в зависимости от платформы и браузер.
Это означает, что вы не можете использовать нажатие в случае стрел.
$(document).on( "keydown", keyPressed);
function keyPressed (e){
e = e || window.e;
var newchar = e.which || e.keyCode;
alert(newchar)
}
left = 37,up = 38, right = 39,down = 40
$(document).keydown(function(e) {
switch(e.which) {
case 37:
$( "#prev" ).click();
break;
case 38:
$( "#prev" ).click();
break;
case 39:
$( "#next" ).click();
break;
case 40:
$( "#next" ).click();
break;
default: return;
}
e.preventDefault();
});