在没有jquery的情况下只执行一次事件侦听器函数
Execute event listener function only once without jquery
我编写了一段代码,用上下箭头将一个元素垂直移动到6个项目的前面。当按下回车键时,我会加载一组带有该项目的图像。代码运行良好,但在回车后,这段代码需要停止,所以我可以用箭头键和回车做其他事情。现在它只是在输入被击中后继续运行。正如你所看到的,我尝试了var检查,但我似乎无法从开关中更改变量。有人知道怎么做吗?
var enterPushed = false;
if(!enterPushed){
document.addEventListener('keydown', function(event){
if(event.keyCode == 38){
console.log("up");
if(margTop > 122){
margTop = margTop - 60;
marginTop();
i = i - 1;
bliep.play();
}
}
if(event.keyCode == 40){
console.log("down");
if(margTop < 422){
margTop = margTop + 60;
marginTop();
i = i + 1;
bliep.play();
}
}
if(event.keyCode == 13){
switch(i){
case 1:
enterPushed = true;
startup(1);
break;
case 2:
enterPushed = true;
startup(2);
break;
case 3:
enterPushed = true;
startup(3);
break;
case 4:
enterPushed = true;
startup(4);
break;
case 5:
enterPushed = true;
startup(5);
break;
case 6:
enterPushed = true;
startup(6);
break;
}
}
});
}
现在您可以在options
对象中传递一个once
布尔值,如下所示:document.body.addEventListener('click', _ => console.log('once'), {once: true});
来源:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
目前浏览器兼容性:Chrome 55、Firefox 50、Safari(WebKit)夜间版。
如果要停止所有关键事件,只需删除事件侦听器。
var enterPushed = false;
var handleKeyDown = function(){
if(event.keyCode == 38){
console.log("up");
}
if(event.keyCode == 40){
console.log("down");
}
if(event.keyCode == 13){
console.log('enter');
document.removeEventListener('keydown', handleKeyDown);
}
};
document.addEventListener('keydown', handleKeyDown);
如果你想停止只听回车键或特定的键,你可以添加一个标志,并根据它和键代码进行检查。这看起来就像你在这里几乎完成的。我完成了逻辑并减少了代码:
if(event.keyCode == 13 && enterPushed){
enterPushed = true;
startup(i);
}
有趣的是,取消附加事件侦听器的方法的调用与预期完全一样:removeEventListener(type, listener[, useCapture])
:
function listenOnce(node, type, listener, useCapture) {
if (useCapture == null) {
useCapture = false;
}
function wrapper() {
node.removeEventListener(type, wrapper, useCapture);
return listener.apply(this, arguments);
}
node.addEventListener(type, wrapper, useCapture);
}
相关文章:
- 主干模型更改事件只触发一次
- 如何检测滚动事件是否像在触摸设备上一样只触发一次
- 在单击事件中,第一次单击时激发代码一次,其余代码在所有单击时运行
- 简单的onclick事件只起过一次作用
- 一次点击,两次'单击'事件已启动
- Javascript事件发射器一次处理多个事件
- jQuery单击事件在一次之后不会触发
- JQuery只检查了一次事件工作
- 只为构造函数的所有实例触发一次事件侦听器
- 如何只调用一次事件处理程序,而不是每次单击项目时调用事件处理程序
- 在鼠标悬停时添加事件,如何只添加一次事件
- 每 60 秒仅启动一次事件 (JavaScript)
- 主干分组依据集合仅在一次事件单击后呈现
- 在没有jquery的情况下只执行一次事件侦听器函数
- 如何在Javascript中只执行一次事件处理程序
- jquery只在静态和动态元素上触发一次事件
- 在获得一次事件后删除ng单击事件
- HTML5 -视频播放时每隔几秒触发一次事件
- 为多个控件注册一次事件处理程序-是否可能
- 只运行一次事件