使用jQuery捕获和冒泡

问题描述 投票:24回答:2

我是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。

我不知道我是不是错了,但是这个测试表明默认的浏览器传播方法是冒泡的。

如果我错了,请纠正我。

javascript jquery html event-bubbling propagation
2个回答
41
投票

jQuery只使用事件冒泡。如果要添加使用捕获模型的事件处理程序,则必须使用addEventListener显式执行此操作,并在问题中显示第三个参数true


4
投票

事件冒泡,将从最内层元素开始执行到最外层元素。

事件捕获将从外部元素开始执行到最内部元素。

但jQuery将使用事件冒泡。我们可以用以下方式实现事件捕

$("body")[0].addEventListener('click', callback, true);

addEventListener中的第3个参数,它将告诉浏览器是否进行事件冒泡或事件捕获。

默认情况下为false。

如果它是假的,那么它将需要事件冒泡。如果是真的那么它将采取事件捕获。

© www.soinside.com 2019 - 2024. All rights reserved.