Javascript jQuery在keydown之后等待keyup

Javascript jQuery在keydown之后等待keyup,javascript,jquery,keydown,keyup,Javascript,Jquery,Keydown,Keyup,我想在按下键后触发一次事件,只有在按下箭头键后才会触发另一个事件,如下所示: $('body').keydown(function (e) { if(e.keyCode==40) { //do something } $('body').keyup(function (d) { if(d.keyCode==40) { //do something else }

我想在按下键后触发一次事件,只有在按下箭头键后才会触发另一个事件,如下所示:

$('body').keydown(function (e)
{
    if(e.keyCode==40)
    {
        //do something
    }
    $('body').keyup(function (d)
    {
        if(d.keyCode==40)
        {
            //do something else
        }
    }
}
这段代码只起部分作用。按住向下箭头键时,会连续触发向下键

我有一个setInterval,当我按住箭头键时,它的刷新率正在改变。不幸的是,在这种情况下setTimeOut不是一个选项

因此,我的代码如下所示:

        clearInterval(interval);
        refresh = 100;
        interval();

如果您需要准确地触发事件,而不是像示例中那样处理事件,那么您需要使用方法。

如果您只想在按键保持按下的情况下执行一次操作,只需跟踪:

var arrowKeyDown = false;

$('body').keydown(function(e) {
    if (e.which == 40 && !arrowKeyDown) {
        arrowKeyDown = true;
        // ...
    }
});

$('body').keyup(function(e) {
    if (e.which == 40) {
        arrowKeyDown = false;
    }
});

演示:

如果完成后确实需要删除keyup侦听器,


部分?那么,什么部分对您不起作用呢?当前,每当发生keydown事件时,您都会将一个新的事件处理程序绑定到onkeyup事件。另外,你能不能对你的问题说得更具体一点?你到底需要什么?已经有两个不同的事件(一个用于
keydown
,一个用于
keydup
)?我知道这段代码不起作用,我只是试图传达我想要实现的。对不起,我应该说得更清楚。在keyup之前,我只想执行一次keydown。在keyup事件发生一次之前,这不起作用。但是,+1。你的意思是想触发
keyup
事件而不是处理它吗?不,你说得对,但是由于“keydown”嵌套在“keyup”中,它只在初始“keyup”后正确发生。我的术语充其量也不可靠,所以如果我沟通错误,我道歉。
$('body').keydown(function (e)
{
    console.log('down');
}​).keyup(function(e){console.log('up')});​​​​
var arrowKeyDown = false;

$('body').keydown(function(e) {
    if (e.which == 40 && !arrowKeyDown) {
        arrowKeyDown = true;
        // ...
    }
});

$('body').keyup(function(e) {
    if (e.which == 40) {
        arrowKeyDown = false;
    }
});
document.body.addEventListener('keydown', function (e) {
    if(e.keyCode === 40){
        console.log('key 40 down');
        // key down code
        document.body.addEventListener('keyup', function listener(d){
            if(d.keyCode === 40){
                document.body.removeEventListener('keyup', listener, true);
                console.log('key 40 up');
                // key up code
            }
        }, true);
    }
}, true);​