Я хочу, чтобы определенная функция выполнялась, когда я нажимаю клавишу, любую клавишу. Но позвольте ему запуститься один раз (в тот момент, когда вы его нажмете). Я ожидал сделать это с помощью «keydown», но он ведет себя так же, как «keypress».
addEvent(document, "keypress", function (e) {
console.log("keypress");
});
addEvent(document, "keydown", function (e) {
console.log("keydown");
});
addEvent(document, "keyup", function (e) {
console.log("keyup");
});
function addEvent(element, eventName, callback) {
if (element.addEventListener) {
element.addEventListener(eventName, callback, false);
} else if (element.attachEvent) {
element.attachEvent("on" + eventName, callback);
} else {
element["on" + eventName] = callback;
}
}
PS: документация по функции addEvent находится в этом вопросе
Согласно этой документации :
Если вам нужно связать событие, когда вы нажимаете клавишу, вам следует использовать onKeyDown() , так как это то, что выполняется при нажатии клавиши , но не при ее нажатии.
Вы можете сделать что-то вроде этого:
onKeyUp() будет выполняться, когда клавиша будет «отпущена» , то есть когда пользователь перестанет ее нажимать . Например:
Посмотрите, что теперь произойдет, если мы используем onKeyDown() , напишите что-нибудь в текстовом поле:
Согласно тому, что вы указали в комментариях (что он выполняется только один раз) , я думаю, вы могли бы использовать что-то вроде этого:
Во-первых,
keyPress
это не то же самое, чтоKeyDown
KeyPress = KeyDown + KeyUp
Чтобы лучше понять это, давайте посмотрим, что происходит, когда пользователь не отпускает клавишу
Стоит отметить, что правильное функционирование keyPress зависит в основном от соседнего с ним виджета инструментария, если предыдущий код не работает, просто выполните следующее исправление.
Используйте свойство
KeyboardEvent.repeat
, чтобы знать, если вы слишком долго нажимаете одну и ту же клавишу: