微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EventListener beforeunload和JavaScript全局变量

如何解决EventListener beforeunload和JavaScript全局变量

我有一个SpringBoot / JSP / JavaScript应用程序,并且仅当更改页面的命令不是来自应用程序内部时,才尝试触发 beforeunload 浏览器弹出消息。来自浏览器(后退,前进,刷新,主页等)

因此,每次点击应用中的按钮时,我都会

  1. actionFromApp JavaScript全局变量设置为 true (该变量在每次刷新页面认设置为 false
  2. 禁用页面中的所有按钮
  3. 提交表格

我100%确信正确设置了全局变量,应用无法禁用按钮并提交表单而不将其设置为true。但是随机的beforeunload事件侦听器似乎无法检测到它:这发生在每个按钮上,有时是在第一次单击页面时立即发生,有时是在单击几次后出现。

这怎么可能?

我的代码

JS文件顶部的变量声明

let actionFromApp = false;

onButtonClick

function buttonClick(formName) {
   setActionFromApp();
   disableAllActiveButtons(formName);
   document.getElementById(formName).submit();
}

SetActionFromApp

function setActionFromApp() {
   actionFromApp = true;
}

EventListener

window.addEventListener("beforeunload",function(event) {
   if (!actionFromApp) {
      event.preventDefault();
      event.returnValue = true;
   }
});

我知道删除 if 子句或将其设置为true时,EventListener都可以正常工作。

干杯。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。