Событие нажатия клавиши не вызывается только в начале и конце текстового поля в Firefox (JQuery) - PullRequest
2 голосов
/ 06 мая 2010

Я слушаю события нажатия клавиш в поле ввода с делегированием. По какой-то причине Firefox не вызывает делегированное событие для курсора ВВЕРХ в начале поля или курсора ВНИЗ в конце. ЛЕВАЯ и ПРАВАЯ работают все время как положено.

Непосредственное связывание прослушивателя событий с полем работает нормально, поэтому оно должно быть как-то связано с делегированием. Кто-нибудь знает, если это известная проблема, я не могу найти что-либо на Google / форумах и т.д ..?

$("div").delegate(":input", "keypress", function(e){
  // doesn't get triggered
});

$("div :input").bind("keypress", function(e){
  // gets triggered fine
});

Вот демонстрация, которая показывает проблему - http://livsey.org/jquery.delegation.html

1 Ответ

0 голосов
/ 06 мая 2010

Эти ключи не всплывают в Firefox, по крайней мере, в этом случае, поэтому .delegate() или .live() не будут работать. Это известная проблема, в этом случае лучше использовать другое событие, например keydown или keyup, вы можете посмотреть документацию jQuery для .keypress(), чтобы быстро вспомнить об этом:

Обратите внимание, что нажатие клавиши и нажатие клавиши предоставляют код, указывающий, какая клавиша нажата, а нажатие клавиши указывает, какой символ был введен. Например, строчная буква «а» будет отображаться как 65 при нажатии клавиш и при нажатии, а как 97 при нажатии клавиш. Прописная буква «А» сообщается как 65 по всем событиям. Из-за этого различия при отлове специальных нажатий клавиш, таких как клавиши со стрелками, лучше использовать .keydown () или .keyup ().

Обновление вашего кода до этого работает:

$("div")().delegate(":input", "keyup", function(e){
  log("delegated: "+e.keyCode);
});

$("div :input").bind("keyup", function(e){
  log("bound: "+e.keyCode);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...