#javascript #keyboard #keypress #keycode
#javascript #клавиатура #нажатие клавиши #код ключа
Вопрос:
Я обнаруживаю нажатую клавишу ( <tab>
в данном случае) внутри поля ввода текста. Пока я пишу, все в порядке. Но когда я тестирую на другом компьютере (ноутбуке с той же версией Firefox), он возвращает «Undefined». Почему?
Например: когда я нажал <tab>
клавишу, она должна вернуться 9
. Вместо этого он возвращает Undefined
или 0
на некоторых других машинах. Почему?
Используя следующий код JS:
function keyHandler(e) {
var charCode;
if (e amp;amp; e.which) {
charCode = e.which;
} else if (window.event) {
e = window.event;
charCode = e.keyCode;
}
if (charCode == 9) {
bla.. bla.. bla.. bla..
}
}
Что меня удивляет, так это то, что он работает на моем pc
, но не на другом laptop
. У клавиатур ноутбуков разные коды клавиш?
или почему?
Ответ №1:
попробуйте:
function keyHandler() {
var e = arguments[0] || window.event,
charCode = e.which || e.keyCode || e.charCode;
if (charCode == 9) {
bla.. bla.. bla.. bla..
}
else {
console.log( charCode );
}
}
или просто используйте jQuery
Комментарии:
1. Должно быть
function keyHandler(e)
.. верно? Также он не работает в IE: (2. Нет,
e
переменная определяется внутри функции и присваивается первому аргументу (arguments[0]
) (или в случае IE,window.event
, потомуarguments[0]
что будетundefined
), на какую версию IE вы ссылаетесь?3. присваивается первому аргументу (аргументы [0])?? Итак, пожалуйста, каким будет вызов функции со стороны элемента? Я имею в виду, не будет ли этого
onkeypress="keyHandler(event);"
???4.
document.onkeyup = keyHandler;
или, если вы хотите, чтобы он работал только тогда, когда элемент сфокусирован, дайте элементу идентификатор иdocument.getElementById("elementid").onkeyup = keyHandler
обратите внимание: нажатие клавиши, а не нажатие клавиши. Обратите внимание, что с jQuery это было бы намного проще, поскольку вам не нужно думать о различиях в браузерах в простых задачах.5.
document.getElementById("elementid").onkeyup = keyHandler;
и ввод текста с<input id="elementid" type="text" />
помощью не работает даже в Firefox: (