`
123003473
  • 浏览: 1064286 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Js 冒泡事件阻止

 
阅读更多
1. 事件目标
现在,事件处理程序中的变量event保存着事件对象。而event.target属性保存着发生事件的目标元素。这个属性是DOM API中规定的,但是没有被所有浏览器实现 。jQuery对这个事件对象进行了必要的扩展,从而在任何浏览器中都能够使用这个属性。通过.target,可以确定DOM中首先接收到事件的元素(即实际被单击的元素)。而且,我们知道this引用的是处理事件的DOM元素,所以可以编写下列代码:
$(document).ready(function(){
 $('#switcher').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()。例如,在表单提交期间,我们会对用户是否填写了必填字段进行检查,如果用户没有填写相应字段,那么就需要阻止默认操作。我们将在第8章详细讨论表单验证。

事件传播和默认操作是相互独立的两套机制,在二者任何一方发生时,都可以终止另一方。如果想要同时停止事件传播和默认操作,可以在事件处理程序中返回false,这是对在事件对象上同时调用.stopPropagation()和.preventDefault()的一种简写方式。


【转载地址】http://www.cnblogs.com/jams742003/archive/2009/08/29/1556187.html



分享到:
评论

相关推荐

    阻止滚动条事件冒泡

    在JavaScript中,我们可以使用`event.stopPropagation()`方法来阻止事件冒泡。当我们在监听的事件处理函数中调用这个方法时,可以确保事件不会继续向上层元素传播。例如,如果我们在一个内部元素上监听`mousewheel`...

    javascript阻止事件冒泡的一种方法

    `index.html`通常是网页的结构,而`min.js`可能包含了压缩过的JavaScript代码,用于演示阻止事件冒泡的实现。通过查看这两个文件,我们可以更深入地理解阻止事件冒泡的实践应用。 总结一下,阻止事件冒泡是...

    js阻止冒泡事件

    js阻止冒泡事件的方法有2种。 事件冒泡:当一个元素上的事件被触发时,同样的事件会在那个元素的所有祖先元素中被触发。 这个事件是从原始元素开始一直冒泡到DOM树最上层。 目标元素:任何一个事件的目标元素...

    Js 冒泡事件阻止实现代码

    以上就是JavaScript中阻止事件冒泡的实现方式以及与之相关的`event` 对象的使用。通过这些方法,我们可以更精细地控制事件在DOM树中的传播和处理。在实际开发中,合理利用这些功能可以提高用户体验,避免不必要的...

    JS冒泡事件与事件捕获实例详解

    在冒泡阶段,可以在任何父级元素上的事件处理函数中调用event.stopPropagation()方法来阻止事件进一步向上冒泡。 事件捕获则是与冒泡相对的一个过程。在事件捕获模型中,事件从最外层(window对象)开始向下传播,...

    js阻止冒泡及jquery阻止事件冒泡示例介绍.docx

    本文将详细介绍如何使用原生JavaScript (JS) 和 jQuery 来阻止事件冒泡,并通过实际示例加深理解。 #### 二、JS 阻止事件冒泡的方法 ##### 1. 原生JS阻止事件冒泡 在原生JS中,阻止事件冒泡可以通过以下两种方式...

    深入分析js的冒泡事件

    在javascript的dom操作做肯定会遇到js的冒泡事件,最常见的是div弹窗事件如图解 当点击灰色部分是弹窗消失,点击黑色部分时没有效果。 通过下面一段代码来分析js的冒泡事件 html代码: 代码如下: &lt;!DOCTYPE ...

    JS事件冒泡浏览器兼容

    此外,`event.stopPropagation()`方法可以阻止事件继续向上冒泡,而`event.stopImmediatePropagation()`则不仅可以阻止冒泡,还能阻止同一元素上的其他事件处理函数被执行。 总结一下,JavaScript事件冒泡是浏览器...

    js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件

    2. **阻止事件冒泡**: 事件冒泡是指事件从最深的节点开始,逐级向上层节点传播事件。当一个元素和其子元素都有事件监听器时,点击子元素会先执行子元素的事件,然后依次执行所有父元素的事件。`event....

    鼠标键盘事件及事件冒泡.pptx

    JavaScript+jQuery 网页特效设计;鼠标事件;1、鼠标事件;1、鼠标事件(案例);2、键盘事件;2、键盘事件(案例);3、事件的冒泡与阻止;3、事件的冒泡与阻止;3、事件的冒泡与阻止;...3、事件的冒泡与阻止

    js阻止冒泡

    js阻止冒泡 $(document).click(function(){ $(".scxl").children('ul').hide(); })

    Js冒泡事件详解及阻止示例

    总的来说,JavaScript的事件冒泡机制是DOM事件处理的基础,理解并掌握如何阻止事件冒泡对于编写复杂的交互式Web应用非常关键。通过原生JavaScript或使用像jQuery这样的库,我们可以精确控制事件的传播和处理,从而...

    js事件冒泡及其阻止方法

    `event.stopPropagation()`用于阻止事件冒泡,保持事件在当前元素内处理。事件委托则是一种优化策略,将事件监听器放在共享的父元素上,利用`event.target`来识别和处理具体触发事件的子元素,减少了重复的事件绑定...

    js 冒泡事件

    有时我们需要阻止事件冒泡,以免影响到父元素的事件处理。这可以通过在事件处理函数中调用`event.stopPropagation()`来实现。这样,事件就不会继续向上层元素传播。 ### 4. HTMLMaopao.html文件分析 `htmlMaopao....

    事件冒泡解决方案

    使用`event.preventDefault()`可以阻止事件的默认行为,但并不会阻止事件的冒泡。在本例中,这可能不是必要的,因为默认行为通常与冒泡无关。 4. **特定事件处理**: 如果你只想让外部div的事件在特定条件下触发...

    zepto.js中tap事件阻止冒泡的实现方法

    然而,在使用tap事件的时候,会遇到阻止事件冒泡的问题。在zepto.js中,原生的事件处理方法如stopPropagation(),并不能阻止tap事件的冒泡行为。这是因为tap事件与click事件在浏览器处理上存在差异,click事件的...

    jquery阻止事件冒泡

    jQuery库提供了方便的方式来处理DOM事件,包括阻止事件冒泡的功能。这个功能在构建交互式网页时非常有用,可以避免不必要的事件处理或者防止多次执行相同的操作。 jQuery中的`event.stopPropagation()`方法是阻止...

    JavaScript 事件冒泡简介及应用

    为了更好地控制事件冒泡,开发者可以使用`event.stopPropagation()`方法来阻止事件继续向上冒泡,或者使用`event.stopImmediatePropagation()`防止其他在同一元素上注册的事件处理程序被执行。这些技巧在处理复杂...

Global site tag (gtag.js) - Google Analytics