zoukankan      html  css  js  c++  java
  • Js冒泡事件详解及阻止

    Js冒泡机制是指如果某元素定义了事件A,如click事件,如果触发了事件之后,没有阻止冒泡事件,那么事件将向父级元素传播,触发父类的click函数。 
    如下例所示: 

        <html> 
        <script type="text/javascript" src="jquery-1.7.1.js"></script> 
        <script> 
        function ialertdouble(e) { 
        alert('innerdouble'); 
        stopBubble(e); 
        } 
         
        function ialertthree(e) { 
        alert('innerthree'); 
        stopBubbleDouble(e); 
        } 
         
        function stopBubble(e) { 
        var evt = e||window.event; 
        evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡 
        } 
         
        function stopBubbleDouble(e) { 
        var evt = e||window.event; 
        evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡 
        evt.preventDefault();//阻止浏览器默认行为,这样链接就不会跳转 
        } 
         
        $(function() { 
        //方法一 
        //$('#jquerytest').click(function(event) { 
        // alert('innerfour'); 
        // event.stopPropagation(); 
        // event.preventDefault(); 
        //}); 
         
        //方法二 
        $('#jquerytest').click(function() { 
        alert('innerfour'); 
        return false; 
        }); 
        }); 
        </script> 
        <div onclick="alert('without');">without 
        <div onclick="alert('middle');">middle 
        <div onclick="alert('inner');">inner</div> 
        <div onclick="ialertdouble(event)">innerdouble</div> 
        <p><a href='http://www.baidu.com' onclick="ialertthree(event)">innerthree</a></p> 
        <p id='jquerytest'><a href='http://www.baidu.com'>innerfour</a></p> 
        </div> 
        </div> 
        </html> 

    当你点击inner的时候,会依次弹出‘inner’,‘middle’和‘without’。这就是事件冒泡。 

    从直观上来看,也是这样的,因为最里层的区域是在父级节点中的,点击了子级节点的区域,其实也是点击了父级节点的区域,所以事件会传播起来。 

    其实,很多的时候,我们并不想事件冒泡,因为这样会同时触发几个事件。 

    接下来:我们点击innerdouble。就会发现她并没有冒泡,因为她在调用的方法ialertdouble()中调用了stopBubble()方法,方法通过判断浏览器类型(Ie通过cancleBubble() 、firefox通过stopProgation())来阻止冒泡。 

    但如果是链接的话,我们会发现她也会阻止冒泡,但是会跳转,这就是浏览器的默认行为。需要借助preventDefault()方法来阻止。具体可以查看ialertthree()。 

    目前主流的都是借助jquery来绑定click事件的,这样的话,就简单多了。 

    我们可以在点击事件时传入参数event,然后直接 

        event.stopPropagation(); 
        event.preventDefault(); //没有链接不需要加这个。 

    这样就可以了。 

    框架就是好,其实还有更简单的,在事件处理程序中返回false,这是对在事件对象上同时调用stopPropagation()和preventDefault()的一种简写方式。 
    【详细代码见上面,记得载入jquery.js。】 

    其实也还可以在每个click事件中加入判断: 

        $('#id').click(function(event){ 
        if(event.target==this){ 
        //do something 
        } 
        }) 

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

    不过推荐使用return false,Jquery绑定事件的话。 

  • 相关阅读:
    Mysql初始化root密码和允许远程访问
    windows下nodejs express安装及入门网站,视频资料,开源项目介绍
    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
    python3.4学习笔记(二十五) Python 调用mysql redis实例代码
    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法
    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
    python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
    python3.4学习笔记(二十) python strip()函数 去空格 函数的用法
    python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
  • 原文地址:https://www.cnblogs.com/ranran/p/3615922.html
Copyright © 2011-2022 走看看