我正在使用以下代码(纯粹用于测试目的):
$(window).bind('unload', function() {alert('unload!')});
$(window).unload(function () {alert(".unload()")});
我有两个问题:
为什么它能起作用 - 即为什么我会看到两条消息?我读到某个地方将两个事件监听器附加到相同的DOM对象没有任何效果;第二个和更多的听众被忽略。
为什么Firefox会在标准的,类似系统的消息框中显示这两个消息,而在使用页面的过程中触发的所有其他消息(也是警报)总是显示在这个丑陋的标题中,恼人的,像消息盒一样的东西?
正如我在对this question发表的评论中写的那样,你真的认为alert()
(Chrome / WebKit)阻止unload
是一个好主意吗?使用console.log替换警报(如那里所建议的)将不会给你带来很多有用的效果,因为在刷新页面或导航到另一个页面后,正在清除控制台(至少在Chrome中)。你可以看到你的消息的痕迹在它们实际消失之前的几毫秒内写入控制台,所以我宁愿发现它没用。在卸载时禁用警报并不是最好的选择。很难做一些严肃的测试,“糟糕”的页面可以通过显示自己的“烦人”消息,而不是使用警报(jQuery UI,某些div等)来轻松解决。
这些问题纯粹是为了满足我对所有答案的渴望! :]所以,不要认真对待它(比如做一些额外的测试,小提琴例子等)。只是,写下你对此的了解或感受。
答案 0 :(得分:1)
为同一事件(使用jQuery)绑定多个事件处理程序肯定会导致两者都被触发。您可能正在考虑对“onfoo”元素属性进行连续赋值,但这不是jQuery(或我所知道的任何其他现代框架)在内部使用的机制。
浏览器会显示他们想要的alert()
条消息。它不受页面代码的控制。
最后,禁止“卸载”事件处理程序中的alert()
对用户来说是一个好主意。您可以控制调试控制台是否在页面加载时清除。
答案 1 :(得分:1)
刷新页面后立即清除(至少在Chrome中) 导航到另一个
设置调试器以保留控制台!了解您每天使用的工具的功能。