【问题标题】:Do something on key hold and on keyup在 key hold 和 keyup 上做一些事情
【发布时间】:2012-10-14 23:30:49
【问题描述】:

我需要调用函数:

  1. 按住键的每一秒(例如,按住 5 秒时,它应该每秒触发 5 次)。

  2. 当用户释放密钥 (keyup) 时,如果不到一秒。

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

如果第二个语句“有点”有效,首先我会遇到问题,因为 keypress 事件在某些浏览器上不起作用,并且 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/

感谢您的帮助!

【问题讨论】:

标签: javascript jquery


【解决方案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);
}

【讨论】:

  • 你为什么使用down这个变量而不是仅仅清除-keyup上的区间?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
相关资源
最近更新 更多