0

我正在使用以下代码(纯粹用于测试目的):

$(window).bind('unload', function() {alert('unload!')});
$(window).unload(function () {alert(".unload()")});

我有两个问题:

  1. 为什么它会起作用——即为什么我会看到两条消息?我在某处读到将两个事件侦听器附加到相同的 DOM 对象没有效果;第二个和更多的听众被忽略。

  2. 为什么 Firefox 在一个标准的、类似系统的消息框中显示这两条消息,而在使用页面的过程中触发的所有其他消息(也包括警报)总是显示在这个丑陋、无标题、烦人的消息框中-喜欢的东西?

  3. 正如我在对这个问题的评论中所写的那样,你真的认为阻止alert()unload通过 Chrome / WebKit)是一个好主意吗?用 console.log 替换警报(如那里所建议的那样)不会给您带来太多有用的效果,因为在您刷新页面或导航到另一个页面之后,控制台(至少在 Chrome 中)正在被清除。您可以在它们真正消失之前的几毫秒内看到写入控制台的消息痕迹,所以我宁愿觉得它没用。在卸载时禁用警报并不是最好的主意。很难进行一些严肃的测试,“糟糕”的页面可以通过显示自己的“烦人”消息而不使用警报(jQuery UI、某些 div 等)来轻松解决问题。

这些问题纯粹是为了满足我想知道所有答案的渴望!:] 所以,不要认真对待它(比如做一些额外的测试,小提琴例子等)。只是,写下你对此的了解或感受。

4

2 回答 2

1

为同一个事件(使用 jQuery)绑定多个事件处理程序肯定会导致两者都被触发。您可能正在考虑对“onfoo”元素属性进行连续分配,但这不是 jQuery(或我知道的任何其他现代框架)在内部使用的机制。

浏览器显示alert()他们想要的消息。它不受页面上代码的控制。

最后,禁止alert()“卸载”事件处理程序对用户来说是个好主意。您可以控制调试控制台是否在页面加载时清除。

于 2012-07-17T14:38:26.447 回答
1

(至少在 Chrome 中)在您刷新页面或导航到另一个页面后立即被清除

设置调试器以保留控制台!了解您每天使用的工具的功能。

  • Chrome - 右键单击​​控制台选项卡,上下文菜单中的选项
  • Firebug - 控制台中的按钮
于 2012-07-17T15:00:39.057 回答