zoukankan      html  css  js  c++  java
  • 阻止事件冒泡

    事件冒泡的概念在此不再重复,下面主要介绍防止事件冒泡的方法:符合W3C标准的event.stopPropagation();  和IE浏览器下的window.event.cancelBubble=true;

    <html>
    <head>
        <title>stopPropagation阻止冒泡cancelBubble</title>
        <style>
        body{
            color:#333;
            font-size:12px;
        }
        li{
             40px;
            height:20px;
            background: orange;
            margin:4px;
        }
        </style>
        <script>
        window.onload=function(){
            var olia=document.getElementById('lia').getElementsByTagName('li');
            var olib=document.getElementById('lib').getElementsByTagName('li');
    
            for(var i=0;i<olia.length;i++)
            {
                olia[i].onclick=function(){
                    alert('aaaali');
                };
            }
    
            for(var i=0;i<olib.length;i++)
            {
                olib[i].onclick=function(e){
                    alert('bbbbli');
                    window.event.cancelBubble=true;//IE     /重要代码
                    e.stopPropagation(); //非IE  W3C标准    /重要代码
                };
            }
    
            document.body.onclick=function(){
                alert('bodybody');
            };
            document.onclick=function(){
                alert('document');
            };
    
        }
        </script>
    </head>
    <body>
      
            <div id="a">
                <ul id="lia">单击下面的列表.会触发body事件
                    <li>项目1</li>
                    <li>项目2</li>
                    <li>项目3</li>
                </ul>
    
                <ul id="lib">单下面的列表.不会触发body事件.
                    <li>项目1</li>
                    <li>项目2</li>
                    <li>项目3</li>
                </ul>
            </div>
    </body>
    </html>
    上述代码注释中标注了阻止事件冒泡的方法,下面是针对两种方法的封装:

    function stopBubble(e){
                //var e=e||window.event;
                if(e) //判断是否为非IE浏览器(非IE支持e)
                {
                    e.stopPropagation(); //w3c的stopPropagation()
                }
                else
                {
                    window.event.cancelBubble=true; //cancelBubble=true
                }
            }
    封装后只要在不想冒泡的事件处理函数中调用stopBubble(e) 方法即可:

        <script>
        window.onload=function(){
            var olia=document.getElementById('lia').getElementsByTagName('li');
            var olib=document.getElementById('lib').getElementsByTagName('li');
    
            for(var i=0;i<olia.length;i++)
            {
                olia[i].onclick=function(){
                    alert('aaaali');
                };
            }
    
            for(var i=0;i<olib.length;i++)
            {
                olib[i].onclick=function(e){
                    alert('bbbbli');
                    stopBubble(e);     //调用封装的组织冒泡函数  即可
                    //window.event.cancelBubble=true;//IE
                    //e.stopPropagation(); //非IE  W3C标准 
                };
            }
    
            document.body.onclick=function(){
                alert('bodybody');
            };
            document.onclick=function(){
                alert('document');
            };
    
    
            function stopBubble(e){
                //var e=e||window.event;
                if(e) //判断是否为非IE浏览器(非IE支持e)
                {
                    e.stopPropagation(); //w3c的stopPropagation
                }
                else
                {
                    window.event.cancelBubble=true; //cancelBubble=true
                }
            }
    
        }
        </script>


    注意千万不要记混淆了这几个单词:IE:window.event.cencelBubble=true;       W3C:event.stopPropagation();




  • 相关阅读:
    关于用网线连开发板和电脑网卡问题
    信号量同步编程
    信号量互斥编程
    信号通讯
    有名管道通讯
    dell 燃 7000 系列 7460/7560 禁用触控板 触摸板
    关于错误node_modules/@types/jasmine/index.d.ts(39,52): error TS1005: '=' expected.
    环境配置,nodejs,cnpm,git,webstorm,powershell,
    gitflow工作流
    <问题汇总>ionic2开发app
  • 原文地址:https://www.cnblogs.com/chayangge/p/4288683.html
Copyright © 2011-2022 走看看