如何在函数中使用事件监听器?

问题描述

在卸载页面之前,我需要先征求用户的确认。如果我在JS中执行此操作,它将起作用:

window.onbeforeunload = function () { //close confirm
    return '';
}

但是当我将其放入函数中以使其更加灵活时,我似乎没有注册

function sth()
{
    window.addEventListener('beforeunload',closeConfirm,false);
}

function closeConfirm()
{
    return '';
}

有人可以告诉我区别吗?在纯JS中在函数外部注册事件后,删除也无法在函数中进行。 sth()通过按下按钮来调用。我需要在登录时启用此事件监听器,并在注销或超时时将其删除,但是我不能使其与函数调用一起使用,而仅在页面加载时起作用。

---刷新--- 例: https://jsfiddle.net/6mvuet1h/1/

如果您注释掉2-4行,则无法正常工作。

解决方法

所以我正在编辑我的答案,因为我以前误解了你的问题。

beforeundload mdn page上我们可以读到某些浏览器(包括Chrome)需要设置event.returnValue。其他一些浏览器需要调用event.preventDefault()。因此,您的closeConfirm函数应如下所示:

function closeConfirm(event)
{
    event.preventDefault();
    event.returnValue = '';
    return '';
}