2009-03-04 3 views
4

Могу ли я избежать магических чисел при совпадении клавиш в javascript?Как избежать магических чисел при сопоставлении event.keyCode в javascript

Примером может служить 13 to match the enter key.

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

ответ

5

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

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

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

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

Согласно документации разработчика Mozilla, значение Unicode ключа будет храниться в любом event.keyCode или event.charCode, но не тот и другой. Независимо от того, какой из них имеет код, он также будет сохранен в event.which. Однако, если значение хранится в charCode, оно будет чувствительным к регистру. Таким образом, в зависимости от того, откуда вы получаете свои события, вам, возможно, придется проверять как «a», так и «A». Если у вас есть роскошь только получить свое ключевое событие из события 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 и т. Д.

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

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

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

+0

Спасибо за это - и извиниться за то, что приняли вас так поздно. Я как-то пропустил ваш ответ полностью. – Ken

+0

Нет проблем. Немного отсроченный удар по репутации - всегда приятный сюрприз. –