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();




  • 相关阅读:
    PHPCMS V9后台表单向导用户提交的信息新增“修改”的功能
    phpcms V9最实用的23个调用代码
    phpcms V9推荐位无法调用自定义字段的解决方法
    将博客搬至CSDN
    爬取淘宝商品信息selenium+pyquery+mongodb
    selenium库
    requests库+ajax数据分析+多线程爬取头条图集
    requests微博爬取Ajax数据+mongoDB存储
    redis存储
    pymongo操作MongoDB
  • 原文地址:https://www.cnblogs.com/chayangge/p/4288683.html
Copyright © 2011-2022 走看看