event.stopPropagation()用法介绍

stopPropagation()函数用于阻止当前事件在DOM树上冒泡

根据DOM事件流机制,在元素上触发的大多数事件都会冒泡传递到该元素的所有祖辈元素上,如果这些祖辈元素上也绑定了相应的事件处理函数,就会触发执行这些函数。

使用stopPropagation()函数可以阻止当前事件向祖辈元素的冒泡传递,也就是说该事件不会触发执行当前元素的任何祖辈元素的任何事件处理函数。

该函数只阻止事件向祖辈元素的传播,不会阻止该元素自身绑定的其他事件处理函数的函数。event.stopImmediatePropagation()不仅会阻止事件向祖辈元素的传播,还会阻止该元素绑定的其他(尚未执行的)事件处理函数的执行。

此外,由于live()函数并不是将事件处理函数直接绑定到自己身上,而是"委托"绑定到祖辈元素上,由祖辈元素来触发执行。live()函数会先一次性冒泡到文档的顶部,然后为符合条件的元素触发事件。因此,stopPropagation()函数无法阻止live事件的冒泡。

同样地,delegate()函数也是"委托事件函数",只有事件冒泡传递到"受委托"的祖辈元素才会被触发执行。因此,stopPropagation()函数无法阻止该元素到"受委托"的祖辈元素之间的事件冒泡。

该函数属于jQuery的Event对象

语法

eventObject.stopPropagation()

返回值

stopPropagation()函数没有返回值,也可以说返回值为undefined。

示例&说明

请参考下面这段HTML代码:

段落文本内容

与event.stopPropagation()函数相关的jQuery示例代码如下:

// 为所有div元素绑定click事件

$("div").click(function(event){

alert("div-click");

});

//为所有p元素绑定click事件

$("p").click(function(event){

alert("p-click");

});

//为所有button元素绑定click事件

$(":button").click(function(event){

alert("button-click");

// 阻止事件冒泡到DOM树上

event.stopPropagation();// 只执行button的click,如果注释掉该行,将执行button、p和div的click

});

运行代码

注意,live()函数无法阻止事件的冒泡传递,相应的jQuery示例代码如下(仍参照上面的HTML代码)。点击按钮,p-click、div-click、button-click都会执行:

// 为所有div元素的click事件绑定处理函数

$("div").click(function(event){

alert("div-click");

});

// 为所有p元素的click事件绑定处理函数

$("p").click(function(event){

alert("p-click");

});

// 为div元素内的所有button元素的click事件绑定处理函数

$("div").live("click",":button",function(event){

alert("button-click");

event.stopPropagation();

});

// 点击按钮,所有事件处理函数都会执行

// 因为live()函数先直接冒泡到document,然后再来触发事件,因此它无法阻止事件冒泡(执行函数时都已经冒泡完毕,当然无法阻止)

运行代码

delegate()函数无法阻止该元素和"受委托"元素之间的事件冒泡,相应的jQuery示例代码如下(仍参照上面的HTML代码)。点击按钮,会执行p-click、button-click:

// 为所有div元素的click事件绑定处理函数

$("div").click(function(event){

alert("div-click");

});

// 为所有p元素的click事件绑定处理函数

$("p").click(function(event){

alert("p-click");

});

// 为div元素内的所有button元素的click事件绑定处理函数

$("div").delegate(":button","click",function(event){

alert("button-click");

event.stopPropagation();

});

// 点击按钮,会执行p-click和button-click

// 因为delegate()函数会把button元素的点击事件委托给div元素来触发,所以事件必须冒泡到div元素才能触发,它无法阻止button到div之间的事件冒泡,所以会执行p-click。

运行代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 5,208评论 0 8
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 5,234评论 0 2
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 4,914评论 0 1
  • 儿时的农村,是非常热闹的,家家户户每年春种秋收,一片繁忙,那时人也多,我们的父辈正值年轻,祖辈身体也都还很好,所以...
    养猫人依若阅读 2,047评论 1 1
  • 父亲在电话里说开了口—— “你最近怎么样啊,工作顺利吗?” “恩,都还好,你那里怎么样啊” 我听到电话那头传来父亲...
    迷路的某某阅读 2,271评论 0 0