【问题标题】:Does Events Handlers in JavaScript for one event fired as FIFO, LIFO or in parallel?JavaScript 中的事件处理程序是作为 FIFO、LIFO 还是并行触发的一个事件?
【发布时间】:2010-12-05 14:33:05
【问题描述】:

JavaScript 中的事件处理程序是作为 FIFO、LIFO 还是并行触发的?

【问题讨论】:

    标签: javascript events internals


    【解决方案1】:

    这很简单。 DOM 级别 2 事件模块 does not specify order 将在其中触发事件侦听器。但是,DOM Level 3 Events 模块does specify order要和注册一样一个。

    先注册——先解雇。

    请注意,DOM 3 级事件模块仍是草案,而 2 级是推荐。然而,现代浏览器通常完全遵循这个 3 级规范草案的语义,而不是旧的 2 级规范。

    在实践中,IIRC,只有 IE 不尊重事件侦听器的顺序。所有其他浏览器将其实现为 FIFO(并且如 DOM L3 事件中所述)。你也可以找到related tests online :)

    【讨论】:

    • 确实,我现在非常讨厌 IE8,因为它以相对于地球上所有其他浏览器包括 IE7 的反向顺序执行我的事件。 Grr.
    【解决方案2】:

    由于 JavaScript 的单线程特性,事件和计时器会排队并按顺序依次执行,它们会在执行过程中出现空缺时运行。

    最好用图表来说明这一点:

    第一个块执行完毕后,有两个异步事件在等待,鼠标点击回调定时器,浏览器选择鼠标点击 在本例中,计时器将等待到下一个可能的时间,以便执行。

    查看 John Resig 关于Timers and Events 的这篇非常好的文章。

    【讨论】:

      【解决方案3】:

      PPK 有一篇关于事件冒泡和事件捕获的优秀文章。

      http://www.quirksmode.org/js/events_order.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-06
        • 1970-01-01
        相关资源
        最近更新 更多