jQuery热键触发太快:如何更慢地捕获按键?

时间:2011-12-30 10:58:55

标签: jquery keypress keydown hotkeys

我正在使用带有以下代码的jQuery热键插件:

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

按下右键时,display_info();被称为约3-4次。如何更慢地抓住按键?

谢谢!

3 个答案:

答案 0 :(得分:2)

尝试使用keyup而不是keydown,或者构建一个计时器。

这是一个快速而肮脏的计时器我敲了一下,它可以让你很好地了解你需要做什么:http://jsfiddle.net/Grimdotdotdot/bnM4T/6/

答案 1 :(得分:0)

我想添加此内容以防其他人遇到此问题。 你遇到的问题听起来和我的问题完全一样。 如果我绑定了多个快捷方式事件,那么每个快捷方式事件的执行时间将比文档中的快捷方式绑定总数少一个。我有这样的事情:

$(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只允许我执行每个快捷方式的代码一次,同时在每次按下快捷方式时保留快捷方式功能,并保持我的代码相对干燥。

答案 2 :(得分:-1)

$(document).bind('keydown', 'right', function(){
    window.setTimeout(function()
    {
            console.log('fired');
            display_info();
    }, 1000);//milliseconds
});