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

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

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

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

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

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

该函数属于jQuery的Event对象

语法

eventObject.stopPropagation( )

返回值

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

示例&说明

请参考下面这段HTML代码:

<div>
    <p>段落文本内容
        <input type="button" value="点击" />
    </p>
</div>

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 Event.stopPropagation() 函数详解的更多相关文章

  1. jQuery Event.stopImmediatePropagation() 函数详解

    stopImmediatePropagation()函数用于阻止剩余的事件处理函数的执行,并防止当前事件在DOM树上冒泡. 根据DOM事件流机制,在元素上触发的大多数事件都会冒泡传递到该元素的所有祖辈 ...

  2. jQuery Event.which 属性详解

    jQuery Event.which 属性详解 which属性用于返回触发当前事件时按下的键盘按键或鼠标按钮. 对于键盘和鼠标事件,该属性用于确定你按下的是哪一个键盘按键或鼠标按钮. which属性对 ...

  3. Jquery之each函数详解

    最近项目被each函数坑惨了,想来还是好好整理下关于each函数的方方面面,一来方便自己查阅,二来为读者提供经验和教训,废话不多说,来看看Each函数到底是怎么坑人的. 一. 全局jQuery.eac ...

  4. js中event.preventDefault()和 event.stopPropagation( ) 方法详解

    event.preventDefault() 1.首先event.preventDefault()是通知浏览器不要执行与事件关联的默认动作,例如:  这里a标签的默认事件是跳转,这里我们告诉浏览器取消 ...

  5. jQuery.fn.extend() 函数详解

    jQuery.fn.extend()函数用于为jQuery扩展一个或多个实例属性和方法(主要用于扩展方法). jQuery.fn是jQuery的原型对象,其extend()方法用于为jQuery的原型 ...

  6. JQuery中on()函数详解

    JQuery API中定义的on方法,专业名词很多,读起来并不是那么容易,而对于开发人员知道函数怎么使用就可以了.本文将JQuery的说明翻译如下: on(events,[selector],[dat ...

  7. jquery ajax error函数详解

    代码:$(document).ready(function() {            jQuery("#clearCac").click(function() {        ...

  8. jQuery Event.delegateTarget 属性详解

    // 为id为element的元素中的所有span元素绑定click事件 $("#element").on( "click", "span" ...

  9. jQuery.attr() 函数详解

    一,jQuery.attr()  函数详解: http://www.365mini.com/page/jquery-attr.htm 二,jQuery函数attr()和prop()的区别: http: ...

随机推荐

  1. IOS 应用跳转 (IOS9白名单)

    跳转到指定app的实现 IOS中应用的跳转是通过URL实现的,因此在实现应用跳转之前我们要设置一下对应的URL. 图一(寻找配置软件的URL) 图二(具体配置选项) 注意: 如果IOS版本为IOS9 ...

  2. iOS之UI--微博个人详情页

    前言:微博个人详情页,和我常用的的QQ空间的详情页是同样的.要求能够融会贯通,做这一类的界面能够快速上手实现. 动态图效果展示: 直接使用UINavigationBar->UITableView ...

  3. Windows 编 程中的字符串

    (1)在win32编程中,如何使用string类型 #include <string> using namespace std; LPTSTR    lpCmdLine = L" ...

  4. [转]Linux下的Makefile

    Makefile 介绍——————— make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序. 首先,我们用一个示例来说明Makefile的书写规则.以便 ...

  5. Android多进程需要注意的一个地方

    可能很多项目都会有一个自定义的Application,做一些初始化操作以及全局化的一些数据保存,这时如果程序中定义了远程服务(android:process=":remote"), ...

  6. 定制Asp.NET 5 MVC内建身份验证机制 - 基于自建SQL Server用户/角色数据表的表单身份验证

    背景 在需要进行表单认证的Asp.NET 5 MVC项目被创建后,往往需要根据项目的实际需求做一系列的工作对MVC 5内建的身份验证机制(Asp.NET Identity)进行扩展和定制: Asp.N ...

  7. ruby 删除文件

    f = "app/assets/#{vm.uuid}.rrd" if FileTest::exist?(f) File.delete(f) end

  8. 【mysql】关于innodb_file_format

    一.几条mysql命令 通过以下命令看一下mysql中 innodb_file_format的配置 mysql> show engines; +--------------------+---- ...

  9. mongodb--java操作

    一.mongodb客户端 mongodb提供诸多语言的客户端,也包括java的客户端.通过这些客户端,我们可以很方便地使用编写代码的方式对mongodb进行操作.这里使用java客户端进行示例.使用j ...

  10. Button未设type属性时在非IE6/7中具有submit特性

    代码如下 <!DOCTYPE html> <html> <head> <title>Button在Form中具有submit的特性</title& ...