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
反向事件冒泡称为捕获阶段.
通过true作为第三个参数来Event.addEventListener把它触发捕获阶段
el.addEventListener("click", function () {
console.log("i run in capture");
}, true);
Run Code Online (Sandbox Code Playgroud)
当然,它不适用于传统平台.您需要一个DOM3事件填充程序来模拟事件系统.随意贡献DOM-Shim
| 归档时间: |
|
| 查看次数: |
4714 次 |
| 最近记录: |