JavaScript / jQuery: нажатие клавиш для навигации по клавиатуре (событие, которое не работает) - PullRequest
0 голосов
/ 25 августа 2010

При обработке событий клавиш [Up | Down | Press] следует использовать .which или .keyCode?Могу ли я получить пример кода для обработки трех событий клавиатуры в jQuery ?Можете ли вы сделать это без JQuery?Я хочу, чтобы он работал надежно в каждом браузере.

Обновление

Как ни странно, событие jQuery. Нормализация не работает для моего handleKey Нажмите обработчик (события):

// Add which for key events
if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
    event.which = event.charCode || event.keyCode;
}

Я получаю это до и после нормализации внутри handleKey Нажмите (это не установка event.which для значения в event.keyCode):

  • event.which = 0
  • event.charCode = 0
  • event.keyCode = 40

Однако код работает, еслиВместо этого я использую handleKey Down .Я думаю, что это связано с нажатием клавиши против нажатия клавиши;код работает для моего обработчика handleKey Down (событие).

К сожалению, мне нужно использовать нажатие клавиши (не нажатие клавиши), поскольку я хочу использовать клавиши навигации для навигации: если пользователь нажимает и удерживает клавишу со стрелкой, нажатие клавиши событие срабатывает один раз , но отдельные нажатие клавиши события запускаются для каждого вставленного символа).

Ответы [ 4 ]

0 голосов
/ 11 февраля 2014

Согласно эта страница :

event.which не определена в IE <9 для <code>keydown, а keyup.

event.keyCode равно 0 вGecko (Seamonkey, Firefox) на keypress для ключей, возвращающих символ.

event.charCode поддерживается только при нажатии клавиш и включении Internet Explorer (Mac).

Попробуйтеэто на JSFiddle

0 голосов
/ 25 августа 2010

jQuery нормализует event.which (см .: api.jquery.com / event.which / ), так что это все, что вам нужно.

0 голосов
/ 25 августа 2010

Обратитесь к jQuery API для документации по нажатию клавиш (), которую вы можете привязать. http://api.jquery.com/keypress/

Кроме того, вот хорошее руководство по созданию навигации с помощью клавиш с помощью jquery: http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-keypress-navigation-using-jquery/

РЕДАКТИРОВАТЬ: Важные / более соответствующие строки из API:

Если необходимо отловить нажатия клавиш в любом месте (например, для реализации глобальных сочетаний клавиш на странице), полезно прикрепить это поведение к объекту документа. Из-за всплытия событий все нажатия клавиш будут перемещаться вверх по DOM к объекту документа, если явно не остановлены.

Чтобы определить, какой символ был введен, мы можем проверить объект события, который передается в функцию-обработчик. Хотя браузеры используют разные атрибуты для хранения этой информации, jQuery нормализует атрибут .which, поэтому мы можем надежно использовать его для получения кода символа.

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

0 голосов
/ 25 августа 2010

Пожалуйста, обратитесь к этой теме , связанной с вашей проблемой.

В общем, я часто спорю о том, что, поскольку это позволит вам отслеживать как charCodes, так и keyCodes. event.which был встроен в jQuery для нормализации этих различных методологий.

Вы можете найти больше информации о keyCodes здесь .

...