事件冒泡和捕获之间有什么区别?在这两个中,哪个是更快更好的模型?
的addEventListenerDOM方法支持的第三可选,布尔参数(将useCapture),以指示该功能是否应使用事件冒泡或事件捕捉作为传播方法。在本文中,差异很好地展示了(单击示例并查看代码)。
从 SO 和博客文章的其他问题中,我得出结论,事件冒泡是首选,主要是因为 IE8- 不支持它。
假设我只需要支持 IE9+,在什么情况下事件捕获比事件冒泡更必要或更受欢迎?换句话说,在什么情况下让事件先在最外层元素上执行,然后在最内层元素上执行会更好?我正在寻找一个简单的、真实的例子来演示事件捕获的使用......
javascript requirements event-propagation dom-events event-capturing
我试图使用我在Stackoverflow上找到的一些代码设置"当你点击元素外部,关闭它"类型的东西:
$(document).click(function() {
$('.list-to-hide').hide();
});
$('.show-list-button').click(function(event) {
event.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)
有人可以用stopPropagation解释后面的部分吗?我不明白为什么需要它.
谢谢!马特
如何激活自定义事件以通知其子/兄弟姐妹?例如:
<div id="div1">
<div id="div2"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
div2有addEventListener('customEvent2',doSth),然后div1将触发一个自定义事件(customEvnet2).但这永远不会触发div2的"doSth"功能
示例代码:http: //jsfiddle.net/r4tcT/2/
"div 1触发器customEvent 2"按钮永远不会起作用
所以当父级触发自定义事件(dispatchEvent [IE9]/fireEvent [IE9 - ]/trigger [jQuery])时,子级无法捕获事件.
有没有解决方法?
码:
<!-- snip -->
<div class="parent" id="parent">
<div class="child" id="child">
</div>
</div>
<!-- snip -->
Run Code Online (Sandbox Code Playgroud)
/* snip */
$(function () {
$("#parent").click(function () {
alert("This dialog should only show up if the parent is clicked.");
});
});
/* snip */
Run Code Online (Sandbox Code Playgroud)
(这只是实际代码的基本结构......在实际代码中有些东西是不同的,例如.子是jQuery UI Draggable元素)