- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个来自客户的奇怪问题,他们包含的代码使用 onbeforeunload()
来触发对话框,但他们还包含另一个公司代码,该代码也绑定(bind)了此事件处理程序。
有没有可能两者同时执行?
我一直在读这个,http://oreilly.com/catalog/9780596101992 “JavaScript:权威指南,第五版”试图帮助更好地理解浏览器内部和 Javascript 堆栈中发生的事情,但事实证明它相当费脑筋。
我从书中了解到,如果使用 Level 2 API addEventListener()
附加某些事件,则它们可以同时执行,但顺序将取决于浏览器。但是没有提到 onbeforeunload()
事件。只是 onunload()
。
这让我想到了问题的第二部分。如果在 onbeforeunload()
中触发了一个事件,我认为除非它返回 true,否则永远不会调用 onunload()
是否正确?
如果有人可以阐明它,或者给我提供一个很好的教程/指南,或者将多个事件处理程序分配给同一个事件,或者专门针对这两个事件,那就太棒了。
最佳答案
Is it possible for both to execute at the same time?
不是同时字面上,不是 - 浏览器中的 Javascript(当前)是单线程的。因此 onbeforeunload
事件可以有多个处理程序,但它们将被连续调用,而不是同时调用。至少在理论上;实际上,看起来只有其中一个被调用(见下文)。
If an event is triggered in onbeforeunload() am I right in thinking that unless it returns true, the onunload() will never be called?
如果任何 onbeforeunload
处理程序取消卸载,则不会调用任何 onunload
处理程序。您可以通过做两件事来取消卸载(因为这里的浏览器不同):首先,您将一个字符串分配给 event
对象的 returnValue
属性,然后返回该字符串出功能。详情 here和 here . (该字符串作为提示,让用户决定是否取消卸载。)
理论说了这么多,让我们看看实际发生了什么:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Test Page</title>
<style type='text/css'>
body {
font-family: sans-serif;
}
</style>
<script type='text/javascript'>
window.onload = pageInit;
function pageInit() {
hook(window, 'beforeunload', beforeUnload1);
hook(window, 'beforeunload', beforeUnload2);
hook(window, 'unload', unload1);
hook(window, 'unload', unload2);
}
function beforeUnload1(event) {
var s;
event = event || window.event;
s = "Message from beforeUnload1";
event.returnValue = s
return s;
}
function beforeUnload2(event) {
var s;
event = event || window.event;
s = "Message from beforeUnload2";
event.returnValue = s
return s;
}
function unload1(event) {
alert("Message from unload1");
}
function unload2(event) {
alert("Message from unload2");
}
var hook = (function() {
var d;
function hookViaAttachEvent(obj, eventName, handler) {
obj.attachEvent('on' + eventName, handler);
}
function hookViaAddEventListener(obj, eventName, handler) {
obj.addEventListener(eventName, handler, false);
}
d = document.createElement('span');
if (d.addEventListener) {
return hookViaAddEventListener;
}
else if (d.attachEvent) {
return hookViaAttachEvent;
}
throw "Neither attachEvent nor addEventListener found.";
})();
function hook(eventName, handler) {
}
</script>
</head>
<body></body>
</html>
在 Chrome、IE 和 Firefox 上,我只看到来自 onbeforeunload
处理程序之一的通知,即使我说可以继续并离开也是如此。我想这可能是因为否则,一个足够烦人的页面可能只是注册了一堆处理程序并不断地提醒用户留在页面上。
在(一个)问题之后,如果我允许继续导航,我会收到两条卸载消息。
关于javascript - 多个 onbeforeunload() 和 onunload() 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2819792/
我已阅读问题的答案 window.onload vs .在那次问答中,许多人声称 window.onload 和 body.onload 是相同的。这不是我的经历。 考虑两个测试页面:
我的 onunload 事件测试脚本有问题它必须仅在窗口 onunload 上触发但它也会在负载下点火..为什么?有什么不对劲,我不知道是什么。。请帮忙 这是html代码 Untitled D
我想触发 onunload 事件来执行一些清理操作,我有多个选项卡(导航栏)显示指向不同网页的多个链接,我的问题是,即使我在其他页面中,我的卸载功能也位于其他一些jsp 的标签被触发。请帮助解决这个问
我刚刚遇到的问题得到了帮助 here . var win = window.open(url, name); win.onunload = StartLoad; win.close(); 为了彻底解决
根据文档(我只使用 Firefox): https://developer.mozilla.org/en/DOM/window.onunload The unload event is raised
我正在开发一个具有 DNS 记录管理器的虚拟主机面板。我必须使用大量 JavaScript 才能使它的性能几乎像桌面应用程序。 我真的很想在浏览器运行 beforeunload 时显示自定义对话框窗口
我写了一些代码,在离开页面之前会要求确认。如果我说"is"离开页面,则需要进行一些清理。现在的问题是 onunload 方法在页面刷新时执行,但在页面关闭时不执行,为什么? 代码: function
我是一个初学者,我在 javascript 文件上经常看到这行代码,例如: window.onunload=function(){}; 我什么时候应该使用这个,它到底有什么作用? 谢谢。 最佳答案 当
我还没有看到 David Flanagan 的《JavaScript - 权威指南》一书(我也在 O'Reilly Answers 上问过这个问题)或其他任何地方提到过这一点,但我发现除非文档完全加载
在 onunload、onbeforeunload 方面遇到问题。当用户离开页面或浏览器关闭时,我需要执行一些代码。 onunload 适用于导航离开,但在浏览器关闭时不起作用。我无法使用onbefo
当用户使用 离开网站时是否可以捕获一些不同类型的操作 $(window).unload(function(){ doSomething(); } 我想将它们分为两种不同的类型。第一个是用户关闭
我无法获取 JavaScript 代码。正在观看 JavaScript 教程,所以我自己测试了它。我去阅读了一下,一些消息来源说它在 Chrome 中不起作用,所以我用 Firefox 进行了测试。然
我想用类似的东西存储一个 cookie Response.Cookies.Set(new HttpCookie("name","value"); 在我完成页面生命周期之后,将它放在 OnUnload(
我想在页面刷新或用户退出页面时将一些信息存储在浏览器的本地存储中以供将来使用。我想我应该使用一些 JavaScript 来检测事件并存储页面访问的状态。 现在我的困境是:我应该使用 Onbeforeu
考虑以下代码: $(window).unload(function () { console.log('foo'); }); 如果我通过导航到不同的 URL 来触发卸载事件,则在浏览器开始获得
我在 window.onunload 事件上使用确认对话框。但是当我单击取消按钮时,它会将我导航到另一个页面,但我想留在那个页面上。这是 window.onunload 事件的问题吗?请给我这个问题的
我正在尝试向表单添加一个监听器,以便在用户离开表单时进行 ajax 调用,但似乎什么也没有发生。当我离开告诉我代码不正确的页面时,在 firefox 中看不到任何错误并且没有任何控制台记录。 jque
我正在为 onbeforeunload、onunload 和在正确的时间生成正确的消息而苦苦挣扎。欢迎任何想法。情况是这样的: 当我使用 onbeforeunload 时,用户会收到一条消息以选择是否
我有一个要求,当用户点击浏览器的[X]按钮时,我应该给他们一个消息。 我使用 JavaScript 的 onUnload 方法完成了这个任务。 现在,即使我刷新页面,也会出现相同的消息! 为什么会这样
我最近接手了一个项目,该项目使用 COMET 执行一些协作工作并处理一个简单的聊天室。最初编写这个东西的人在 STOMP 和 Oribited 之上编写了一些类来处理所有实际的聊天、消息传递和日志记录
我是一名优秀的程序员,十分优秀!