如您所知,事件通常在 JavaScript 中冒泡,因此首先执行触发事件的元素的事件处理程序,然后调用父元素的事件处理程序,依此类推。这种行为会导致我当前正在处理的项目出现一些问题,我宁愿颠倒执行顺序。
我想出了一个使用超时的解决方案:
$(element).mouseover(function(){
var that = this;
setTimeout(function() {
//actual event handler, but references to "this" are replaced with "that"
},$(this).parents().length)
});
所以基本上,事件处理程序在短暂的超时后执行,等待时间取决于 DOM 树中元素的深度:
html 元素的事件处理程序立即执行,body 元素的事件处理程序等待 1 毫秒后执行,依此类推。因此事件的执行顺序是相反的。
我的第一次测试结果是积极的,但我仍然不确定这个解决方案是否存在任何问题或缺点。您觉得这个解决方案怎么样?关于如何解决这个问题的其他想法也受到高度赞赏。
反向事件冒泡称为捕获阶段。
See the DOM 事件架构 http://www.w3.org/TR/DOM-Level-3-Events/#dom-event-architecture
Pass true
作为第三个参数Event.addEventListener
使其在捕获阶段触发
el.addEventListener("click", function () {
console.log("i run in capture");
}, true);
当然,它不适用于旧平台。您需要一个 DOM3 事件垫片来模拟事件系统。请随时为DOM-shim https://github.com/Raynos/DOM-shim
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)