`

js事件冒泡

 
阅读更多

1、事件对象

     js的事件对象中保存了当前被触发事件的一些相关的属性信息,如事件源、事件发生时的鼠标位置、事件按键等。

     事件对象的获取方法:

     IE中可以window.event直接获取,而Firefox中则不可以,可通过如下方法获取:

           1)var event = window.event || arguments.callee.caller.arguments[0]; 

           2)通过参数传。function(e) { var event = window.event || e; }

2、事件源

     事件源即事件发生所在的元素(是最里层元素),在IE中用event.srcElement获取,在Firefox中用event.target获取。兼容性代码如下:

           var event = window.event || arguments.callee.caller.arguments[0];

           var targetObj = event.srcElement || event.target;

 

3、事件冒泡

      在默认情况下,发生在一个子元素上的单击事件(或者其他事件),如果在其父级元素绑定了一个同样的事件,此时点击子元素,click事件会首先被子元素捕获,执行绑定的事件程序,之后会被父级元素捕获,再次激发一段脚本的执行,这就是所谓的“事件冒泡”。

      但有的时候,在一个子元素上处理完单击事件后,不想触发其父元素的相同事件,则需要阻止冒泡的发生,阻止冒泡的方法如下:

      在IE里使用 window.event.cancelBubble = true;

      在Firefox里使用 event.stopPropagation();

      兼容性代码如下所示:

      var event = window.event || arguments.callee.caller.arguments[0];

      if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; }

 

4、jQuery对DOM的事件触发具有冒泡特性,jQuery.Event对象是符合W3C标准的一个事件对象,同时jQuery.Event免去了检查兼容IE的步骤。jQuery.Event提供了一个非常简单的方法来阻止事件冒泡:event.stopPropagation();示例代码如下:

      $("div").click(function(event) { event.stopPropagation(); });

      但是上面方法对使用live 绑定的事件没有作用,需要一个更简单的方法阻止事件冒泡:return false;示例代码如下:

      $("div").live(function() {

             //do something..

             return false;

      });

注意:event.stopPropagation()和return false两种阻止事件冒泡的方式有一些区别:return false 不仅阻止了事件往上冒泡,而且阻止了事件本身;event.stopPropagation() 则只阻止事件往上冒泡,不阻止事件本身,比如如下代码将导致单击文件浏览按钮,无法弹出文件浏览对话框。

<div id="panel">

     <input type="file" id="fileBtn"/>

</div>

<script type="text/JavaScript">

     $("#panel").click(function() {

           return false;     //return false在阻止冒泡的同时也会取消当前事件本身,这将阻止文件浏览对话框弹出

     });

</script>

 

5、阻止事件的默认行为(比如使文本输入框的键盘输入不起作用)

   上面说了阻止事件冒泡,但是事件的默认行为还是会发生,只不过事件不会再往上一级节点传递。阻止事件的默认行为的方式如下:

   1)原生JS的方式:

        

[javascript] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. //如果提供了事件对象,则这是一个非IE浏览器   
  2.     if (event && event.preventDefault) {   
  3.         //阻止默认浏览器动作(W3C)   
  4.         event.preventDefault();   
  5.     } else {  
  6.         //IE中阻止函数器默认动作的方式   
  7.         window.event.returnValue = false;   
  8.     }  
  9.     return false;  

 

    2)jQuery的方式

       在上面的第4点中已经说过了,直接返回false就行

 

 

<html> 
<head> 
<title> 阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)</title> 
<meta name="keywords" content="JavaScript,事件冒泡,cancelBubble,stopPropagation" /> 
<script type="text/javascript"> 
function doSomething (obj,evt) { 
	alert(obj.id); 
var e=(evt)?evt:window.event; //判断浏览器的类型,在基于ie内核的浏览器中的使用cancelBubble
if (window.event) { 
	e.cancelBubble=true; 
} else { 
//e.preventDefault(); //在基于firefox内核的浏览器中支持做法stopPropagation
	e.stopPropagation(); 
} 
} 
</script> 
</head> 
<body> 
<div id="parent1" onclick="alert(this.id)" style="width:250px;background-color:yellow"> 
	<p>This is parent1 div.</p> 
	<div id="child1" onclick="alert(this.id)" style="width:200px;background-color:orange"> 
	<p>This is child1.</p> 
</div> 
<p>This is parent1 div.</p> 
</div> 
<br /> 
<div id="parent2" onclick="alert(this.id)" style="width:250px;background-color:cyan;"> 
	<p>This is parent2 div.</p> 
	<div id="child2" onclick="doSomething(this,event);" style="width:200px;background-color:lightblue;"> 
		<p>This is child2. Will bubble.</p> 
	</div> 
	<p>This is parent2 div.</p> 
</div> 
</body> 
</html>

 

分享到:
评论

相关推荐

    JS事件冒泡浏览器兼容

    JavaScript事件冒泡是Web开发中的一个关键概念,它涉及到用户与网页交互时事件的传递机制。在浏览器环境中,事件冒泡是指事件从最深的节点开始,然后逐级向上层节点传播事件的过程。这个过程允许事件处理函数在不同...

    JavaScript事件冒泡示例.html

    JavaScript事件冒泡是Web开发中的一个关键概念,它在网页交互和动态效果中扮演着重要角色。事件冒泡源于浏览器处理事件的方式,当一个事件(如点击、鼠标移动等)在一个元素上触发时,该事件会自底向上沿着DOM树...

    阻止滚动条事件冒泡

    要实现这个功能,我们需要理解JavaScript事件冒泡的概念。在DOM中,事件会从最深的节点开始向上层节点传播,直到到达文档的根节点,这个过程就称为事件冒泡。阻止事件冒泡可以避免一个事件被多次处理,提高性能,...

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

    JavaScript中的事件冒泡是事件处理的一个重要概念,它是指事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上转播至最不具体的节点(文档)的过程。这个机制允许事件在事件流的每个阶段都...

    JavaScript事件冒泡与取消事件冒泡代码演示

    本段代码演示了如何使用JavaScript取消HTML事件的冒泡,即当后代元素的事件被触发时,祖先元素的相同事件也会被触发。代码中,页面包含一个div元素和一个嵌套在其中的span元素,分别设置了单击响应函数。当单击span...

    JavaScript 事件冒泡简介及应用

    JavaScript 事件冒泡是Web开发中的一个重要概念,它涉及到用户与网页交互时事件的处理方式。事件冒泡是指在一个对象上触发的事件会按照从内到外的顺序依次经过其所有父级元素,直到到达文档的根节点(通常是document...

    【JavaScript源代码】javascript事件冒泡,事件捕获和事件委托详解.docx

    JavaScript中的事件处理是Web开发中的核心概念,主要涉及事件冒泡、事件捕获以及事件委托。这三种机制在处理用户交互和DOM元素之间的事件时起着至关重要的作用。 1. **事件冒泡**:事件冒泡是事件处理的默认模式,...

    js事件冒泡实例分享(已测试)

    在JavaScript中,事件冒泡是一种事件处理机制,它描述了事件如何从最深的节点(事件实际发生的元素)向上逐级传播到最不深的节点(即包含它的所有祖先元素)。当在某个元素上触发一个事件时,该事件会首先在这个元素...

    JS 事件冒泡 示例代码

    ### JS 事件冒泡原理与应用 #### 一、事件冒泡的概念 在JavaScript中,事件冒泡是指事件处理程序从最内层元素开始触发,然后逐级向上传播到最外层元素的过程。这种机制使得事件可以在DOM树中沿着元素层次向上冒泡...

    JavaScript 事件冒泡应用实例分析

    在一些传统的小型WEB应用开发过程中,JavaScript通常只是拿来做表单验证而以,所以你很少会遇到因为JavaScript事件冒泡而影响功能的实现情况,又或者事件冒泡对最终实现效果影响不大,可忽略。

    JavaScript事件冒泡机制原理实例解析

    这篇文章主要介绍了JavaScript事件冒泡机制原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 DOM事件流(event flow )存在三个阶段:事件捕获阶段...

    事件冒泡解决方案

    在JavaScript的DOM编程中,事件冒泡是一个非常重要的概念,尤其在处理多级嵌套元素的事件时。事件冒泡是指事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上转播至最不具体的节点(文档...

    利用事件冒泡(Event Bubbling )获取鼠标下的元素属性

    在JavaScript编程中,事件处理是不可或缺的一部分,尤其是事件冒泡(Event Bubbling)机制,它是理解DOM(Document Object Model)事件处理的关键概念之一。事件冒泡是指事件开始时由最具体的元素(文档中嵌套层次...

    Javascript 事件冒泡机制详细介绍

    Javascript中的事件冒泡机制是其事件处理模型的重要组成部分,它描述了当一个事件在DOM元素上发生时,这个事件不仅仅会在该元素上触发,还会向上逐级在父级元素中传播,直至到达DOM树的根部。这种机制允许开发者在...

    javascript事件冒泡简单示例

    在下面的示例中,我们将详细探讨JavaScript中的事件冒泡、其原因以及如何阻止它。 事件冒泡是指事件从最深的DOM元素(即事件触发的元素)开始,然后逐级向上层元素传播事件。在这个过程中,每个节点都会接收到相同...

    详解javascript事件冒泡

    事件冒泡是JavaScript中非常重要的一个概念,它描述了事件在DOM树结构中的传播方式。在事件冒泡过程中,一旦某个元素上的事件被触发,那么这个事件会从元素本身开始,沿着DOM树向上层元素传播,直到到达根节点。在此...

    javascript 中事件冒泡和事件捕获机制的详解

    javascript 中事件冒泡和事件捕获机制的详解 二者作用:描述事件触发时序问题 事件捕获:从document到触发事件的那个节点,即自上而下的去触发事件—由外到内 事件冒泡:自下而上的去触发事件—由内到外 绑定事件...

    js事件冒泡及其阻止方法

    JavaScript中的事件冒泡是事件处理的一个重要机制,它是指事件从最深的DOM节点开始,然后逐级向上层节点传播事件的过程。例如,在一个父容器内有子元素的情况下,如果子元素和父元素都绑定了点击事件处理函数,当你...

Global site tag (gtag.js) - Google Analytics