在key hold和keyup上做一些事情

时间:2012-10-14 15:12:24

标签: javascript jquery

我需要调用函数:

  1. 当钥匙被保持时每秒(例如持有五秒钟,它应该每秒发射5次)。

  2. 当用户释放密钥(keyup)且少于一秒时,

  3. 事件应该绑定在文档上,而不是文本输入。

    如果第二个声明“有点”有效,首先我遇到问题,因为按键事件不能在某些浏览器上工作,而且keydown会一直触发事件。

    var interval;
    $(document).on('keypress', function(e) {
        console.log('keypress');
    
        interval = setInterval(function() {
            doSomething(e.keyCode);
        }, 1000);
    
    }).on('keyup', function(e) {
        console.log('keyup');
    
        if(interval === 0) {
            doSomething(e.keyCode);
        }
        clearInterval(interval);
        interval = 0;
    });
    
    
    function doSomething(keyCode) {
         console.log(keyCode);
    }
    

    jsFiddle:http://jsfiddle.net/kWFUA/

    谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我已经更新了小提琴http://jsfiddle.net/kWFUA/3/

var interval;
var called = false;

$(document).on('keydown', function(e) {
    if(interval == null) {
        console.log('keydown');
        called = false;
        interval = setInterval(function() {
            doSomething(e.keyCode);
            called = true;
        }, 1000);
    }

}).on('keyup', function(e) {
    console.log('keyup');
    clearInterval(interval); 
    interval = null;
    if(!called)
        doSomething(e.keyCode);
});

function doSomething(keyCode) {
     console.log(keyCode);
}