jQuery stopPropagation bubble down

atp*_*atp 30 jquery event-bubbling

我有一个带有链接的div:

<div id="myDiv">
    <a href="http://www.lol.com">Lol</a>
</div>
Run Code Online (Sandbox Code Playgroud)

点击<div />应该去某个地方,但点击孩子<a />应该去www.lol.com.我从以前的问题jQuery网站上看到.stopPropagation可以防止冒泡,但我如何防止泡沫向下(这不是必要的吗?).

Geo*_*off 46

事件只会冒泡.因此,在单击事件处理程序a之前触发元素的单击事件处理程序div.如果您需要您描述的行为,则需要将一个单击事件处理程序添加到一个停止传播到div的元素.

$("#myDiv a").click( function(event) {
    event.stopPropagation();
} );
Run Code Online (Sandbox Code Playgroud)

并保留你在div上的任何事件处理程序.这应该允许事件执行它的默认操作,并防止div上的处理程序被触发.

如果您只想阻止对链接的点击,那么您可以更改div元素的事件处理程序

$("#myDiv").click( function( event ) {
    if( !$( event.target ).is( "a" ) )
    {
        // existing event handler
    }
} );
Run Code Online (Sandbox Code Playgroud)

  • 虽然它会起作用,但我恭敬地不同意这个答案.正如我在回答中所说,你只需要检查`event.target`是它的click处理程序中的`<div>`元素(使用`if`语句).没有必要为`<a>`元素添加另一个事件处理程序,它是额外的处理程序和额外的工作,而不需要它. (5认同)
  • 是的,您可以在div事件处理程序中执行if($(event.target).is("a")){/*code here*/}.这更像是一个关于事件冒泡如何工作的解释.在某些情况下,向子节点添加几个事件处理程序可能更容易或更有效,特别是如果有多个元素类型会使if条件更复杂.我将把它包括在答案中. (2认同)