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

How to use eventlisteners in functions?

我需要在卸载页面之前征得用户的确认。如果我在 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 '';
}