Горячие клавиши jQuery срабатывают слишком быстро: как ловить нажатия клавиш медленнее? - PullRequest
2 голосов
/ 30 декабря 2011

Я использую плагин горячих клавиш jQuery со следующим кодом:

$(document).bind('keydown', 'right', function(){
        console.log('fired');
        display_info();
    });

Когда нажата правая кнопка, display_info ();вызывается примерно 3-4 раза.Как я могу поймать нажатия клавиш медленнее?

Спасибо !!

Ответы [ 3 ]

2 голосов
/ 30 декабря 2011

Попробуйте использовать keyup, а не keydown, или создайте таймер.

Вот быстрый и грязный таймер, который я выбил, который должен дать вам хорошее представление о том, что вам нужно сделать: http://jsfiddle.net/Grimdotdotdot/bnM4T/6/

0 голосов
/ 08 февраля 2012

Я хотел бы добавить это на случай, если кто-то еще столкнулся с этой проблемой. Проблема, с которой вы столкнулись, звучит точно так же, как у меня. Если бы я связал несколько событий ярлыков, то каждое из них выполнялось бы на один раз меньше, чем общее количество привязок ярлыков в документе. У меня было что-то вроде этого:

$(document).bind('keydown', 'alt+a', function () {
    alert('A Pressed');
});
$(document).bind('keydown', 'alt+b', function () {
    alert('B Pressed');
});
$(document).bind('keydown', 'alt+c', function () {
    alert('C Pressed');
});

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

$(document).ready(function () {
    $(document).bind('keydown.alt+a', 'alt+a', function () {
        alertAndUnbind('A', 'alt+a');
    });
    $(document).bind('keydown.alt+b', 'alt+b', function () {
        alertAndUnbind('B', 'alt+b');
    });
    $(document).bind('keydown.alt+c', 'alt+c', function () {
        alertAndUnbind('C', 'alt+c');
    });
});
function alertAndUnbind(letter, shortcut) {
    alert(letter);
    $(document).unbind('keydown.' + shortcut, shortcut);
});

Использование unbind таким образом позволило мне выполнять код каждого ярлыка только один раз, сохраняя при этом функциональность ярлыка при каждом нажатии ярлыка, и мой код оставался относительно СУХИМЫМ.

0 голосов
/ 30 декабря 2011
$(document).bind('keydown', 'right', function(){
    window.setTimeout(function()
    {
            console.log('fired');
            display_info();
    }, 1000);//milliseconds
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...