在javascript中反向事件冒泡

Sim*_*mon 11 javascript jquery javascript-events

如您所知,事件通常在javascript中冒泡,因此首先执行触发事件的元素的事件处理程序,然后调用父元素的事件处理程序,依此类推.这种行为导致我正在处理的项目出现一些问题,我宁愿颠倒执行顺序.

我发现了一个使用超时的解决方案:

$(element).mouseover(function(){
    var that = this;
    setTimeout(function() {
       //actual event handler, but references to "this" are replaced with "that"
    },$(this).parents().length)
 });
Run Code Online (Sandbox Code Playgroud)

基本上,事件处理程序在短暂超时后执行,等待时间取决于DOM树中元素的深度:html元素的事件处理程序立即执行,正文的事件处理程序在等待1ms之后执行元素,依此类推.因此事件的执行顺序是相反的.

我的第一次测试的结果是积极的,但我仍然不确定这个解决方案是否有任何问题或缺点.您如何看待这个解决方案?关于如何解决这些问题的其他想法也受到高度赞赏.

Ray*_*nos 20

反向事件冒泡称为捕获阶段.

查看DOM事件体系结构

通过true作为第三个参数来Event.addEventListener把它触发捕获阶段

el.addEventListener("click", function () {
  console.log("i run in capture");
}, true);
Run Code Online (Sandbox Code Playgroud)

当然,它不适用于传统平台.您需要一个DOM3事件填充程序来模拟事件系统.随意贡献DOM-Shim

  • @Raynos客户^^ (3认同)