Лучшая практика для отлова определенных кодов клавиш в onkeypress в Javascript - PullRequest
1 голос
/ 19 июня 2010

Мне несколько любопытно узнать о «лучших методах», когда дело доходит до захвата клавиши ВВОД в HTML-теге ввода. В IE это легко. window.event.keyCode будет 13, когда нажата кнопка ввода, и это довольно просто. Во всех других браузерах объект аргументов передается в функцию. Тем не менее, это, по-видимому, в основном заставляет вас позднее связывать обработчик функции с объектом. Вы можете сделать:

myInput.onkeypress = function (args)
{
   window.alert(args.keyCode);
};

Однако, если вы хотите сделать:

<input onkeypress="checkEnter()" />

Тогда в принципе checkEnter () будет вызываться анонимной функцией (которая теоретически будет иметь объект аргумента), которая затем будет вызывать checkEnter без параметров. Я думаю, вы могли бы сделать что-то совершенно дурацкое, как:

<input onkeypress="checkEnter(arguments)" />

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

Я что-то упустил?

Ответы [ 3 ]

1 голос
/ 19 июня 2010

Как правило, вам никогда не следует указывать функции JavaScript в тегах HTML. Пусть код JavaScript определяет, что должен делать JavaScript, и пусть HTML полностью не знает о существовании JavaScript.

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

0 голосов
/ 19 июня 2010

Узнайте, как это сделать с jQuery .

Еще одна замечательная особенность javascript / jQuery заключается в том, что вы можете сделать ее ненавязчивой, чтобы вы могли полностью отделить ваши скрипты от html, делая более читабельным и javascript кэшируемым браузером.

Grz, Kris.

0 голосов
/ 19 июня 2010

Лучшая практика - использовать то, что вы называете поздним связыванием. Кроме того, вы должны использовать addEventListener вместо onkeypress, по крайней мере, в теории.

Другим способом было бы связать события с использованием некоторой библиотеки, например jQuery .

...