【问题标题】:Some (strange?) issues about window.unload in jQuery关于 jQuery 中 window.unload 的一些(奇怪的?)问题
【发布时间】:2012-07-17 14:36:04
【问题描述】:

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

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

我有两个问题:

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

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

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

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

【问题讨论】:

    标签: javascript jquery google-chrome firefox jquery-events


    【解决方案1】:

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

    浏览器根据需要显示alert() 消息。它不受页面代码的控制。

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

    【讨论】:

    • 当然,浏览器如何显示消息框超出了页面的代码控制。这对我来说很明显。我问,因为我不喜欢 Firefox,它是新的消息框,所以我很好奇,为什么在这种特殊情况下他们又恢复为显示“正常”消息框。
    • 你必须询问 Firefox 开发人员 :-)
    • 嗯...MDN 说(在“多个相同的事件侦听器”中):“如果在同一个 EventTarget 上使用相同的参数注册了多个相同的 EventListener,则重复的实例将被丢弃”。
    • @trejder 这一切都在 identical 的定义中。在上面的问题中,您在每次调用时传递一个不同的函数。
    【解决方案2】:

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

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

    • Chrome - 右键单击​​控制台选项卡,上下文菜单中的选项
    • Firebug - 控制台中的按钮

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-27
      • 2019-08-28
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多