移除beforeunload的事件监听器
removing eventlistener for beforeunload
我正在尝试实现一个弹出(引导模态风格),将被触发为web访问者离开我的网站。
我尝试了不同的替代方案:
$(window).bind('beforeunload', function(){
$("#sModal").modal('show');
return 'Take our survey before you leave.';
});
但是,它在FF中不起作用,而在IE中工作得很好。我还有另一个问题,"你想离开还是留下"警报显示在任何链接点击我的网站本身,跨所有浏览器类型,因为整个页面正在加载。
我通过循环所有锚标记并添加一个click侦听器来删除beforeunload侦听器来解决这个问题,使用:
window.onload = function () {
var allLinks = document.getElementsByTagName('a');
for (var i = 0; i < allLinks.length; i++) {
allLinks[i].addEventListener("click", removeBeforeUnload, false);
}
};
removeBeforeUnload函数刚刚使用了
$(window).unbind('beforeunload');
回到实际使popoup/modal出现在所有浏览器上,我使用的代码从这个stackoverflow回答后,我的文档完成加载:
窗口。Onbeforeunload和window。onunload在Firefox, Safari, Opera中不起作用?
这个解决方案在所有浏览器上都能很好地工作,但是现在我不能在任何我的本地点击链接上取消绑定这个事件!
window.removeEventlistener('beforeunload',null,false);
window.removeEventlistener('onbeforeunload',null,false);
window.removeBeforeUnload();
window.onbeforeunload = null;
我希望你能指出我在正确的方向,并解释为什么我不能解绑定这个事件,我从stackoverflow的答案。谢谢!
一个想法是使用全局变量标志,当标志不为真时,不要在卸载事件处理程序中做任何事情。在链接单击处理程序
中设置此标志为null或false那么你真的不需要删除侦听器
var doUnload = true;
$('a').click(function(){
doUnload = false;
});
function unloadhandler(){
if(doUnload){
// show modal , return message etc
}else{
// do nothing , don't return anything
}
}
可能jQuery正在添加第二个beforeunload
事件监听器,您不能通过DOM API删除相同的方式添加到Window
默认
适合你的是:
var allLinks = $('a');
for (var i = 0; i < allLinks.length; i++) {
$(allLinks[i]).on('click', () => {
$(window).off('beforeunload');
// now add any custom code you want for handling this event
$("#sModal").modal('show');
)};
}
相关文章:
- 在下拉式javascript事件监听器中选择时触发事件
- 如何在音频元素上使用React媒体合成事件监听器
- Javascript事件监听器让我很困惑
- javascript的事件监听器将下拉列表转换为输入按钮
- 组合类和事件监听器:`this`关键字
- 将事件监听器添加到画布时出错
- 如何通过javascript触发事件监听器
- 通过事件监听器在circle的文本匹配id上修改circle元素
- 动态添加javascript事件监听器,做一些无法解释的事情
- 事件处理程序&事件监听器彼此独立
- 为什么我在谷歌闭包中编写的事件监听器不起作用
- 如何在JS中使用事件监听器
- 为什么jQuery选择事件监听器会多次触发
- 为什么不'我的手机上没有设备就绪的事件监听器
- 何时在 Cocos2d-js 3.2 中注销事件监听器和定时回调
- javaScript-我们如何将一个事件监听器设置为另一个事件监听器的从属
- 按键监听器事件在firefox中不起作用
- 谷歌地图监听器事件的行为类似于点击,即使它是鼠标悬停
- 事件处理程序和监听器&事件冒泡和事件捕获
- backbone.js:防止在模型改变时触发监听器事件