首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onbeforeunload事件异常?

onbeforeunload事件异常?
EN

Stack Overflow用户
提问于 2021-05-10 02:58:04
回答 1查看 46关注 0票数 0

我想知道是否有一种方法可以使onbeforeunload事件警报在任何其他情况下触发,除了特定函数导致的页面重新加载。

之前回答的大多数问题充其量都是3年前的。

代码语言:javascript
复制
window.addEventListener('beforeunload', function (e) {

e.preventDefault();

e.returnValue = '';

});

document.getElementById("reload").addEventListener("click", myFunction);

function myFunction() {

location.reload();

}  // I WANT TO EXCLUDE THIS FUNCTION FROM ONBEFOREUNLOAD EVENT ALERT
代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
</head>
<body>
<button id="reload">RELOAD FROM HERE SHOULD NOT TRIGGER ONBEFOREUNLOAD ALERT</button>
</body>
</html>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-10 02:59:49

一个简单的解决方案是设置一个标志,并在beforeunload侦听器中检查该标志:

代码语言:javascript
复制
let beforeUnloadAlert = true;
window.addEventListener('beforeunload', function (e) {
  if (!beforeUnloadAlert) return;

  // etc
  e.preventDefault();
  e.returnValue = '';
});
代码语言:javascript
复制
function myFunction() {
  beforeUnloadAlert = false;
  location.reload();
}

另一种方法是在调用.reload之前删除该侦听器,方法是将该侦听器放入一个命名函数中:

代码语言:javascript
复制
window.addEventListener('beforeunload', unloadHandler);
代码语言:javascript
复制
function myFunction() {
  window.removeEventListener('beforeunload', unloadHandler);
  location.reload();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67461348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档