Выполняется только если клавиша нажата один раз

0

У меня есть следующий код:

onkeyup = function(e) {
                if (e.keyCode == 77) { // the 'm' key
           setTimeout(function () {
            ... // my set timeout stuff
            }

Проблема в том, что каждый раз, когда я нажимаю клавишу m, мой setTimeout re выполняется. Как я могу сохранить его так, чтобы только если я нажимаю и удерживаю один раз, выполняется setTimeout. (больше раз и ничего не должно выполняться).

Спасибо, должно быть достаточно просто, я надеюсь.

  • 1
    как насчет установить переменную и проверить ее? как нажатие = истина внутри блока if и if (e.keyCode == 77 &&! нажат) в условии .. плюс начальный нажатие = ложь вне функции
Теги:
key

1 ответ

1
Лучший ответ

Храните логическую переменную следующим образом:

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.

  • 0
    Не забывайте, e.which - stackoverflow.com/questions/4471582/javascript-keycode-vs-which . Кроме того, что не так с доброй старомодной true и false ?
  • 0
    Это сработало :) Спасибо, приятель!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню