zoukankan      html  css  js  c++  java
  • 探讨Js的事件的冒泡阶段

      近来看到了一个新的知识点叫Js的事件冒泡,因此决定自己来研究一番。

      大家应该都知道,Js中的事件处理分为三个阶段,1:事件的捕获阶段,2:处于目标阶段,3:事件的冒泡阶段。那么什么是事件的捕获和冒泡呢?

      从概念上来说,事件的捕获就是从最外层也就是从html标签开始向内一层层的寻找目标元素,直到捕获到目标为止。而事件的冒泡就是从目标开始,向上一层层的冒泡,直到最上一级为止。

      单从概论上来说,可能不是那么的清楚,所以我们直接上代码。

    1 <div id="div1">
    2     <div id="div2">
    3         <input type="button" id="btn" value="点我"/>
    4         <a href="http://www.baidu.com" target="_black">百度</a>
    5     </div>
    6 </div>

    首先在html中创建了如上的几个元素。

    然后我们给id为"btn"的这个元素绑定一个click事件。

    1 var btn = document.getElementById('btn');
    2 btn.addEventListener('click',function(e){
    3     alert(3); 
    4 });

    然后,运行html,点击按钮,发现的结果是依次alert出了3、2、1。也就是说在触发子元素的click事件时,同时也触发了这个子元素上级的父元素的click事件,那么怎么才能在点击子元素时,不触发其父元素的事件呢?方法其实很简单。将以上的代码作如下的修改:

    1 var btn = document.getElementById('btn');
    2 btn.addEventListener('click',function(e){
    3     alert(3);
    4     e.stopPropagation();                
    5 });        

    然后,再运行,点击按钮,这次的结果就只alert出了1。

    也就是说可以用e.stopPropagation()方法来阻止事件的冒泡。也有的人说,直接用return false;就可以了,但是我在测试的时候,发现,对于用js的addEventListener()方法绑定的事件,使用return false;是无法阻止事件冒泡的。然后使用jquery绑定的事件则是可以的。不过这两种方法还是有区别的。比如说我给html中的a链接也加上一个事件。

    1 var link = document.getElementsByTagName('a')[0];    
    2     link.addEventListener('click',function(e){
    3         alert(3);      
    4 });

    然后,点击链接,结果是先alert出了3、2、1,然后就跳转到了百度。

    我们再加一行代码。

    1 var link = document.getElementsByTagName('a')[0];    
    2 link.addEventListener('click',function(e){
    3     alert(3);
    4     e.preventDefault();        
    5 });

    发现,结果就只alert出了3、2、1,并没有像刚才一样跳转到百度。e.preventDefault()这个方法的作用就是阻止元素的默认事件,因为href的链接就没有被触发了。

    还有一点需要注意的就是在jquery中使用return false;来阻止事件冒泡时,也是会自动的阻止元素的默认事件的。大家有兴趣的可以自己去写写。

    转载文章,请注明出处,http://www.cnblogs.com/olivers/p/5254646.html

    欢迎交流,QQ: 997494167
  • 相关阅读:
    Leetcode 1002. 查找常用字符
    Leetcode 1020. 将数组分成和相等的三个部分
    Leetcode 1021. 最佳观光组合
    Leetcode 1022. 可被 K 整除的最小整数
    算法入门经典第六章 例题6-9 天平
    例题6-7 树的层次遍历
    算法入门经典第六章 例题6-4 破损的键盘
    算法入门经典-第五章 例题5-7 丑数
    算法入门经典第六章 例题6-5 移动盒子
    算法入门经典第六章 例题6-2 铁轨
  • 原文地址:https://www.cnblogs.com/olivers/p/5254646.html
Copyright © 2011-2022 走看看