Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 触发一次后关闭事件侦听器_Javascript_Jquery - Fatal编程技术网

Javascript 触发一次后关闭事件侦听器

Javascript 触发一次后关闭事件侦听器,javascript,jquery,Javascript,Jquery,我有一个脚本,可以触发提供免费下载的弹出框。当用户的鼠标离开页面时,它会触发(显然不是针对移动设备-我已经有了一个解决方案)。在我的脚本中,我设置了一个cookie来停用脚本30分钟,这部分工作正常;如果我刷新页面,弹出窗口将不再显示 问题是,如果有人关闭了弹出框,并且没有刷新页面(或导航到站点上的另一个页面),则每次鼠标移出页面时都会出现弹出框 我正在使用一个设置事件的函数,但我不能让它只触发一次。 (我正在使用的Wordpress站点使用jQueryVer=1.10.2。) 我的Javasc

我有一个脚本,可以触发提供免费下载的弹出框。当用户的鼠标离开页面时,它会触发(显然不是针对移动设备-我已经有了一个解决方案)。在我的脚本中,我设置了一个cookie来停用脚本30分钟,这部分工作正常;如果我刷新页面,弹出窗口将不再显示

问题是,如果有人关闭了弹出框,并且没有刷新页面(或导航到站点上的另一个页面),则每次鼠标移出页面时都会出现弹出框

我正在使用一个设置事件的函数,但我不能让它只触发一次。 (我正在使用的Wordpress站点使用jQueryVer=1.10.2。)

我的Javascript:

if(document.cookie.indexOf('somecookiename')!=-1){
功能加法器(obj、evt、fn){
if(对象添加列表器){
对象添加列表器(evt、fn、false);
}else if(对象附件){
附件(“on”+evt,fn);
}
}
};
jQuery(文档).ready(函数($){
if(document.cookie.indexOf('somecookiename')=-1){
//第三十分钟的var=1000*60*30;
第三十分钟的var=1000*60;
var expires=新日期((新日期()).valueOf()+三十分钟);
document.cookie=“somecookiename;expires=“+expires.toutString();
附录(文件“鼠标输出”,功能(e){
e=e?e:window.event;
var from=e.相关目标| | e.元素;
如果(!from | | from.nodeName==“HTML”){
document.getElementById(“预览下载”).style.display=“块”;
document.getElementById(“back shader”).style.display=“block”;
}
});
}
});
函数showhide(id){
if(document.getElementById){
obj=document.getElementById(id);
如果(obj.style.display==“无”){
obj.style.display=“”;
}否则{
obj.style.display=“无”;
}
}
}
HTML:


出发前:
下载免费预览。。。。
CSS:

#返回着色器,
#预览下载{
显示:无;
}

这可能很简单,但我不是javascript专家。我们将一如既往地感谢您的帮助。

最简单的方法是使用以下方法删除事件侦听器:

document.addEventListener(“单击”),函数处理程序(e){
e、 currentTarget.removeEventListener(e.type,handler);
警报(“仅一次”);
});

单击某处
如果您使用的是jQuery,那么最好使用
Off()

.off()
方法删除附加了
.on()
的事件处理程序。以下是文档:

如果使用jQuery,最简单的解决方案是使用
.one()
而不是
.on()
这相当于在on中触发
.off()

一次调用后关闭侦听器的javascript版本如下:

canvas.addEventListener("mousedown",callback,{
        // This will invoke the event once and de-register it afterward
        once: true
});

函数声明不允许包含在条件中,并且在不同的浏览器上产生不同的结果。Re:
showhide()
,您知道有
$(元素)。toggle()
?在显示给用户取消事件侦听器后,只需使用
.off
方法即可。@Bjorn-是的,我实际上正计划使用.toggle(),但是这段代码对我来说不起作用。我同意这是一条路,只是要知道你需要给函数命名。如果您声明一个匿名处理程序,比如:
element.addEventListener('click',function(){})
Hi Oriol,我们如何在处理程序()本身的定义中调用处理程序?我不明白为什么这是可能的,因为它似乎循环给我!
canvas.addEventListener("mousedown",callback,{
        // This will invoke the event once and de-register it afterward
        once: true
});