У меня есть следующий код:
onkeyup = function(e) {
if (e.keyCode == 77) { // the 'm' key
setTimeout(function () {
... // my set timeout stuff
}
Проблема в том, что каждый раз, когда я нажимаю клавишу m, мой setTimeout re выполняется. Как я могу сохранить его так, чтобы только если я нажимаю и удерживаю один раз, выполняется setTimeout. (больше раз и ничего не должно выполняться).
Спасибо, должно быть достаточно просто, я надеюсь.
Храните логическую переменную следующим образом:
var hasKeyBeenPressed = new Boolean(0);
В вашей функции setTimeout измените это значение на true. При вашей условной проверке кода ключа проверьте и убедитесь, что функция setTimeout выполняется только тогда, когда для этого логического значения установлено значение false.
var hasKeyBeenPressed = new Boolean(0);
onkeyup = function(e) {
if (e.keyCode == 77 && hasKeyBeenPressed == 0) { // the 'm' key
setTimeout(function () {
hasKeyBeenPressed = 1;
... // my set timeout stuff
}
}
}
В этих условиях ваша функция будет выполняться только один раз.
Если вам нужна настойчивость, подумайте об использовании sessionStorage.
e.which
- stackoverflow.com/questions/4471582/javascript-keycode-vs-which . Кроме того, что не так с доброй старомодной true
и false
?