我是jQuery的新手,我正在尝试理解捕获和冒泡的概念。
我已经阅读了很多文章,但大多数都描述了Javascript的事件传播。
让我们假设我们有以下HTML代码:
<div id="outter">
outter
<div id="inner">
inner
</div>
</div>
捕获是我们沿着DOM元素走下去的阶段,冒泡就是我们上升的时候。
在Javascript中,您可以决定使用哪种方式(使用true或false参数):
element.addEventListener('click',doSomething,true) --> capture phase
element.addEventListener('click',doSomething,false) --> bubble phase
有没有类似的jQuery来表示除JavaScript方式之外的哪种方式?
jQuery也使用默认阶段吗?比如泡泡?
因为我使用以下代码来测试这个:
CSS
<style>
div {
border: 1px solid green;
width: 200px;
}
</style>
jQuery的
<script>
$(document).ready(function(){
$('div').click(function(){
$(this).animate({'width':'+=10px'},{duration: 3000})
});
});
</script>
看来当我点击外部div时,只有那个div动画才能得到更大的div。当我点击内部div时,两个div都会生成更大的div。
我不知道我是不是错了,但是这个测试表明默认的浏览器传播方法是冒泡的。
如果我错了,请纠正我。
jQuery只使用事件冒泡。如果要添加使用捕获模型的事件处理程序,则必须使用addEventListener
显式执行此操作,并在问题中显示第三个参数true
。
事件冒泡,将从最内层元素开始执行到最外层元素。
事件捕获将从外部元素开始执行到最内部元素。
但jQuery将使用事件冒泡。我们可以用以下方式实现事件捕
$("body")[0].addEventListener('click', callback, true);
addEventListener中的第3个参数,它将告诉浏览器是否进行事件冒泡或事件捕获。
默认情况下为false。
如果它是假的,那么它将需要事件冒泡。如果是真的那么它将采取事件捕获。