我想在按下键后触发一次事件,只有在向下箭头键释放后触发另一个事件,如下所示:
$('body').keydown(function (e)
{
if(e.keyCode==40)
{
//do something
}
$('body').keyup(function (d)
{
if(d.keyCode==40)
{
//do something else
}
}
}
此代码仅部分起作用。当按住向下箭头键时,将持续触发keydown。
我有一个setInterval,当我按住箭头键时,我的刷新率正在改变。不幸的是,在这种情况下,setTimeOut不是一个选项。
所以我的代码看起来像这样:
clearInterval(interval);
refresh = 100;
interval();
答案 0 :(得分:1)
$('body').keydown(function (e) {
if(e.keyCode==40) {
//do something
}
return false;
})
.keyup(function(e) {
if(e.keyCode==40) {
//do something else
}
return false;
});
$('body').on('keyup', function (e) {
if(e.keyCode==40) {
//do something
}
// after first keyup set to handle next keydown only once:
$(this).one('keydown', function(e) {
if(e.keyCode==40) {
//do something else
}
});
});
如果您需要完全触发该事件,并且未处理,则需要使用$.trigger()
方法。
答案 1 :(得分:1)
如果您只想在按键保持按下时执行一次操作,只需跟踪:
var arrowKeyDown = false;
$('body').keydown(function(e) {
if (e.which == 40 && !arrowKeyDown) {
arrowKeyDown = true;
// ...
}
});
$('body').keyup(function(e) {
if (e.which == 40) {
arrowKeyDown = false;
}
});
答案 2 :(得分:0)
$('body').keydown(function (e)
{
console.log('down');
}).keyup(function(e){console.log('up')});
答案 3 :(得分:0)
如果你真的需要在完成后删除keyup监听器, http://jsfiddle.net/CgmCT/
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);