Как избежать магических чисел при сопоставлении event.keyCode в javascript - PullRequest
4 голосов
/ 04 марта 2009

Можно ли избежать магических чисел при сопоставлении нажатий клавиш в javascript?

В качестве примера можно было бы использовать 13 для соответствия клавише ввода .

Я мог бы указать свои собственные константы, но я не знаю, достаточно ли стабильны эти значения для разных платформ / браузеров / локалей.

1 Ответ

5 голосов
/ 05 марта 2009

Когда я впервые попытался это сделать, я использовал метод charCodeAt объекта String. Например, если вы хотите обнаружить нажатие клавиши «а»:

if ("A".charCodeAt(0) == event.keyCode) {
  /* Do stuff here. */
}

Обратите внимание, что я использовал верхний регистр "A" вместо "a". Это связано с тем, что event.keyCode указывается только как значение Unicode заглавной буквы (если это альфа-ключ). Эта проблема немного усложняется тем, что есть несколько способов получить значение Unicode для нажатой клавиши. В Firefox у вас есть:

  • event.keyCode
  • event.charCode
  • event.which

Согласно документации разработчика Mozilla, значение ключа Unicode будет храниться в event.keyCode или event.charCode , но не в обоих. Независимо от того, какой из них имеет код, он также будет сохранен в event.which . Однако, если значение хранится в charCode, оно будет чувствительно к регистру. Таким образом, в зависимости от того, откуда вы берете свои события, вам, возможно, придется проверять как «а», так и «А». Если вы можете позволить себе только получение ключевого события из события «onkeydown» и нацелены на Firefox, вы можете рассчитывать на получение кода без учета регистра (верхнего регистра), установленного в event.keyCode. Фактически, я проверил это на Firefox 3.0.3 на Windows XP, Firefox 3.0.4 на MacOS 10.4, Safari 3.2.1 на MacOS 10.4 и OmniWeb 5.8 на MacOS 10.4, и все это работает одинаково. Тем не менее, я не пробовал это ни на одной из версий IE, или Opera, и т. Д.

Если вы хотите разработать это с нуля самостоятельно. Я бы посоветовал получить столько разных браузеров, сколько вы можете найти в разных операционных системах, к которым у вас есть доступ, и поэкспериментировать, чтобы выяснить, как каждый браузер сообщает о кодах клавиш. Однако кто-то уже проделал эту работу. Это было даже упомянуто в одном из ответов на вопрос, который вы указали в качестве примера! Это плагин для jQuery, который называется js-hotkeys . Это позволяет зарегистрировать функции обратного вызова, которые будут выполняться при нажатии клавиши или комбинации клавиш. Пример использования, который я скопировал с сайта проекта:

$(document).bind('keydown', 'Ctrl+a', fn);

Он был протестирован для работы на различных браузерах / платформах, поэтому, если вы используете jQuery, это, вероятно, путь. Если вы по какой-то причине не хотите использовать jQuery, вам не повезло. Очевидно, это было основано на другом скрипте , который вы могли бы использовать вместо этого. Я еще не использовал ни одну из этих библиотек лично, поэтому я не могу ручаться за их простоту использования или эффективность. Тем не менее, если бы у меня была твоя проблема, я бы решил ее решить.

...