jQuery事件冒泡阻止

1. 事件目标
现在,事件处理程序中的变量event保存着事件对象。而event.target属性保存着发生事件的目标元素。
这个属性是DOM API中规定的,但是没有被所有浏览器实现 。
jQuery对这个事件对象进行了必要的扩展,从而在任何浏览器中都能够使用这个属性。
通过.target,可以确定DOM中首先接收到事件的元素(即实际被单击的元素)。
而且,我们知道this引用的是处理事件的DOM元素,所以可以编写下列代码:
$(document).ready(function(){
 $('#list').click(function(event){
  $('#switcher .button').toggleClass('hidden');
  })
 })

$(document).ready(function(){
 $('#switcher').click(function(event){
  if(event.target==this){
  $('#switcher .button').toggleClass('hidden');
  }
  })
 })
此时的代码确保了被单击的元素是<div id="switcher"> ,而不是其他后代元素。

现在,单击按钮不会再折叠样式转换器,而单击边框则会触发折叠操作。

但是,单击标签同样什么也不会发生,因为它也是一个后代元素。

实际上,我们可以不把检查代码放在这里,而是通过修改按钮的行为来达到目标 。

2. 停止事件传播

事件对象还提供了一个.stopPropagation()方法,该方法可以完全阻止事件冒泡。
与.target类似,这个方法也是一种纯JavaScript特性,但在跨浏览器的环境中则无法安全地使用 。
不过,只要我们通过jQuery来注册所有的事件处理程序,就可以放心地使用这个方法。

下面,我们会删除刚才添加的检查语句event.target == this,并在按钮的单击处理程序中添加一些代码:

$(document).ready(function(){
 $('#switcher .button').click(funtion(event){
  //……
   event.stopPropagation();
  })
 }) 

  同以前一样,需要为用作单击处理程序的函数添加一个参数,以便访问事件对象。
然后,通过简单地调用event.stopPropagation()就可以避免其他所有DOM元素响应这个事件。
这样一来,单击按钮的事件会被按钮处理,而且只会被按钮处理。
单击样式转换器的其他地方则可以折叠和扩展整个区域。

3. 默认操作

如果我们把单击事件处理程序注册到一个锚元素,而不是一个外层的<div>上,那么就要面对另外一个问题:当用户单击链接时,浏览器会加载一个新页面。

这种行为与我们讨论的事件处理程序不是同一个概念,它是单击锚元素的默认操作。类似地,当用户在编辑完表单后按下回车键时,会触发表单的submit事件,在此事件发生后,表单提交才会真正发生。

如果我们不希望执行这种默认操作,那么在事件对象上调用.stopPropagation()方法也无济于事,因为默认操作不是在正常的事件传播流中发生的。
在这种情况下,.preventDefault()方法则可以在触发默认操作之前终止事件 。

提示 当在事件的环境中完成了某些验证之后,通常会用到.preventDefault()。

例如,在表单提交期间,我们会对用户是否填写了必填字段进行检查,如果用户没有填写相应字段,那么就需要阻止默认操作。

事件传播和默认操作是相互独立的两套机制,在二者任何一方发生时,都可以终止另一方。

如果想要同时停止事件传播和默认操作,可以在事件处理程序中返回false,这是对在事件对象上同时调用.stopPropagation()和.preventDefault()的一种简写方式。

时间: 2024-08-06 15:49:17

jQuery事件冒泡阻止的相关文章

jquery 事件冒泡的介绍以及如何阻止事件冒泡

原文地址:http://www.jb51.net/article/32792.htm 什么是JS事件冒泡? 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window). 如何来阻止Jquery事件冒泡? 通过一

阻止jQuery事件冒泡

Query对DOM的事件触发具有冒泡特性.有时利用这一特性可以减少重复代码,但有时候我们又不希望事件冒泡.这个时候就要阻止 jQuery.Event冒泡. 在jQuery.Event 的文档 中的开头得知,jQuery.Event对象是符合W3C标准的一个事件对象,同时jQuery.Event免去了检查兼容IE的步骤. jQuery.Event提供了一个非常简单的方法来阻止事件冒泡:event.stopPropagation(); Js代码   $("p").click(functio

Jquery 事件冒泡

secying Jquery 事件冒泡 原文链接http://blog.163.com/chtx87_98/blog/static/654011192011830928585/ 原文链接二:http://hi.baidu.com/armyknife/blog/item/60ddc6c378b00847b219a81b.html (1)什么是事件起泡首先你要明白一点,当一个事件发生的时候,该事件总是有一个事件源,即引发这个事件的对象,一个事件不能凭空产生,这就是事件的发生. 当事件发生后,这个事件

JQuery 阻止js事件冒泡 阻止浏览器默认操作

//阻止事件冒泡 event.stopPropagation(); //阻止浏览器默认操作 event.preventDefault(); 代码不一定能执行,写给自己看的. 事件冒泡: 1 <a href="javascript:alert('啦啦啦');"> 2 <ul onclick="alert('德玛西亚');"> 3 <li onclick="alert('大盖伦');"></li> 4

Jquery 事件冒泡 以及阻止默认事件

1.e.preventDefault()阻止事件默认行为 e.preventDefault();----根据英文意思,如:<a href="http://i.cnblogs.com/EditPosts.aspx?opt=1" id="xx">xx</a> $("#xx").click(function(e){ alert("xxx");e.preventDefault();});  ----------

jQuery 取消事件冒泡 阻止后续内容执行 闭包函数 (学习笔记)

1.取消事件冒泡 <title>取消事件冒泡</title> <style> div { border:solid 1px black; } </style> <script src="js/jquery-3.1.1.js"></script> <script> $(function () { $("#big").click(function () { alert("点了大

js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )

在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”. 1..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器if ( e && e.stopPropagation )//因此它支持W3C的stopPropagation()方法e.stopPropagation(); else//否则,我们需要使用IE的方式来取消事件冒泡 window.event.cancelBubble = true;return fal

jquery事件冒泡

一.什么是冒泡事件 事件发生后,浏览器通常首先触发事件发生元素上的事件处理程序,然后是它的父元素,父元素的父元素……依此类推, 直到文档的根元素为止. 这被称为事件冒泡,是事件传播的最常见的方式.当处理好一个事件后, 你可能想要停止事件的传播,不希望它继续冒泡.就要绑定该事件的处理方法. 如上图,给他们都设置一个点击事件,当点击button时即触发button的点击事件时则会触发相应的父元素div发生点击事件,再触发body发生触发事件,以此类推直至document或是window为止. 二.冒

javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。

首先,弄明白js 当中,什么是事件,事件模型在js中是如何设计的.什么是事件冒泡? 什么是“事件冒泡”呢?假设这里有一杯水,水被用某种神奇的方式分成不同颜色的几层.这时,从最底层冒出了一个气泡,气泡会一层一层地上升,直到最顶层.而你不管在水的哪一层观察都可以看到并捕捉到这个气泡.好了,把“水”改成“DOM”,把“气泡”改成“事件”.这就是“事件冒泡” 什么是事件委托呢?event delegation : 地址:http://davidwalsh.name/event-delegate One