【发布时间】:2013-11-28 20:22:25
【问题描述】:
我不知道应该使用哪一个:beforeunload 或 onbeforeunload 他们似乎都在做非常相似的事情,但浏览器兼容性不同。
一些背景:
我有一个表格。在页面加载时,我将表单序列化并将其保存在变量中。如果用户离开页面,我将表单序列化并比较两者,看看是否有任何变化。但是,如果提交了表单,则不应触发该事件。
示例 1
我按预期工作。我只是不明白两者之间的区别:
window.onbeforeunload = function(e) {
if(strOnloadForm != strUnloadForm)
return "You have unsaved changes.";
}
当您保存表单时,使用此行停止触发(绑定到.submit())
window.onbeforeunload = null;
示例 2
window.addEventListener("beforeunload", function( event ) {
if(strOnloadForm != strUnloadForm)
event.returnValue = "You have unsaved changes.";
});
当您保存表单时,使用此行停止触发(绑定到.submit())
window.removeEventListener("beforeunload");
文档内容
我已阅读 onbeforeunload 和 beforeunload 的文档。
在onbeforeunload 部分Notes 下它声明:
您可以并且应该通过window.addEventListener() 和beforeunload 事件处理此事件。那里提供了更多文档。1
这让我觉得我应该使用后者。但是removeEventHandler 的文档是这样说的:
addEventListener()和removeEventListener()在旧版浏览器中不存在。您可以通过在脚本开头插入以下代码来解决此问题,允许在本身不支持它的实现中使用addEventListener()和removeEventListener()。2
有人能说明一下这些的区别,以及最好的使用方法吗?
1https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload#Notes2https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#Polyfill_to_support_older_browsers
【问题讨论】:
-
这是完全相同的事件,但是当使用 addEventListener 时,您总是离开“on”部分。
-
谢谢,这是有道理的,它实际上只是触发同一事件的不同方式。
标签: javascript dom-events onbeforeunload