Событие keypress не работает в IE и Chrome, но работает в FF
Любая идея, почему это может произойти? Я обычно думал, что Chrome будет более прощать с кодами?
$(document).keypress(function(e) {
if(e.keyCode == 39) rightImage();
if(e.keyCode == 37) leftImage();
});
Вот как выглядит клавиша нажатия клавиши. Я что-то упускаю? rightImage(); и leftImage(); являются функциями, которые должны работать, потому что я использую эти функции где-то еще.
Спасибо за помощь!
Ответы
Ответ 1
Измените keypress
на keydown
:
$(document).keydown(function(e) {
if(e.keyCode == 39) rightImage();
if(e.keyCode == 37) leftImage();
});
Событие keydown происходит, когда клавиша нажата, а затем сразу после нажатия клавиши. Затем событие keyup генерируется при отпускании ключа.
Чтобы понять разницу между keydown и keypress, это полезно понять разницу между "характером" и "Ключ". "Ключ" - это физическая кнопка на клавиатуре компьютера, в то время как "Символ" - это символ, набранный нажатием кнопки. Теоретически события keydown и keyup представляют собой клавиши, которые нажаты или выпущены, в то время как событие нажатия клавиши представляет собой типизируемый символ. реализация теории не одинакова во всех браузерах.
Ответ 2
Нашел ответ здесь: http://api.jquery.com/keypress/
"Если вы хотите использовать стрелки, удалять, использовать клавиши backspace в Chrome, вы должны использовать keydown. keypress на этих клавишах работает только в Firefox и Opera."
Ваш код не работал у меня в iE8 (работал в FF), поэтому я переключил keypress на keydown. Сейчас работает в IE. Не проверяйте Chrome здесь.