我正在尝试实现通知,当用户关闭或重新加载页面时。我正在使用以下代码
function unloadPage(){
return "Your changes will not be saved.";
}
window.onbeforeclose = unloadPage;
可以正常工作,但是问题是每当导航发生时就会发生这种情况,即页面刷新或表单提交或超链接单击或发生任何导航..我只想将此代码用于浏览器的刷新和关闭我知道设置标志并进行检查。但是我必须将其集成到一个大型应用程序中,因此很难在每个页面中添加代码,所以有一种简单的方法。有没有一种方法可以捕获刷新或浏览器清理,以便可以使用它。
请注意,在你的代码中,你正在使用onbeforeclose
,但是事件名称是beforeunload
,所以属性是onbeforeunload
,而不是onbeforeclose
。
我只想将此代码仅用于刷新和关闭浏览器。有没有一种方法可以捕获刷新或浏览器清理,以便可以使用它。
不能。相反,你必须捕获每个链接和表单提交,并设置一个标志告诉你的onbeforeunload
处理程序不要返回字符串,或者删除你的onbeforeunload
处理程序(该标志可能更干净)。
例如:
var warnBeforeClose = true;
function unloadPage(){
if (warnBeforeClose) {
return "Your changes will not be saved.";
}
}
window.onbeforeunload = unloadPage;
// ...when the elements exist:
$("a").click(dontWarn);
$("form").submit(dontWarn);
function dontWarn() {
// Don't warn
warnBeforeClose = false;
// ...but if we're still on the page a second later, set the flag again
setTimeout(function() {
warnBeforeClose = true;
}, 1000);
}
或不setTimeout
(但仍然有超时):
var warningSuppressionTime = 0;
function unloadPage(){
if (+new Date() - warningSuppressionTime > 1000) { // More than a second
return "Your changes will not be saved.";
}
}
window.onbeforeunload = unloadPage;
// ...when the elements exist:
$("a").click(dontWarn);
$("form").submit(dontWarn);
function dontWarn() {
// Don't warn for the next second
warningSuppressionTime = +new Date();
}
2017年更新:还请注意,至少在几年前,浏览器不会显示你返回的消息。他们只是使用你返回的事实(而不是null
标志)来显示自己的内置消息。
但是我必须将其集成到一个大型应用程序中,因此很难在每个页面中添加代码,所以有一种简单的方法。
@ User016:这是简单的方法。您已经在每个页面上添加了代码。大概代码是集中的(在每个页面中包含的某个文件中)。如果不是这样,请将其集中化,这样就不会在整个地方重复代码。然后只需将以上内容添加到集中式代码中即可。
我遵循了您建议的第一种方法,但是在某些情况下它失败了,我也不知道为什么。一个是在单击按钮时发生重定向的情况。我不想通知这些时间,所以我
$("button").on('click',dontWarn);
在代码中添加了。有时如果失败并发出警报。您有什么建议吗?@ User016:您的按钮真的是
button
元素吗?不是input[type=button]
吗<button name="Cancel" id="Cancel" type="button">Cancel</button>
这是代码不起作用的那些按钮之一