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);