事件冒泡的应用-事件代理

例子:

    <body>
          <ul id="list">
            <li>111</li>
            <li>222</li>
            <li>333</li>
          </ul>
          <button id="addli">添加</button>
      <script>
          var lists=document.querySelector('#list');
        var lis=document.querySelectorAll('li');//li列表类数组
        var addlis=document.querySelector('#addli');
        for(var i=0;i<lis.length;i++){
            lis[i].addEventListener('click',function(e){
                console.log(e.target.innerText)
            });
        }
        addlis.addEventListener('click',function(){
            var addli=document.createElement('li');
            addli.innerText='添加的li';
            lists.appendChild(addli);
        })
      </script>
   </body>
图片.png

为了使点击li时不管是原来的还是新增的li都有绑定事件(控制台输出内容)
方法一:

    <body>
          <ul id="list">
            <li>111</li>
            <li>222</li>
            <li>333</li>
          </ul>
          <button id="addli">添加</button>
      <script>
          var lists=document.querySelector('#list');
        var lis=document.querySelectorAll('li');//li列表类数组
        var addlis=document.querySelector('#addli');
        for(var i=0;i<lis.length;i++){
            lis[i].addEventListener('click',function(e){
                console.log(e.target.innerText)
            });
        }
        addlis.addEventListener('click',function(){
            var addli=document.createElement('li');
            addli.innerText='添加的li';
            addli.addEventListener('click',function(e){
                console.log(e.target.innerText)
            });
            lists.appendChild(addli);
        })
      </script>
    </body>
图片.png

这个方法是一般的事件绑定方法,缺点是代码臃肿,如果有n种事件绑定,新添加的元素后,就需要重新写n种事件绑定,总共有2n个事件,这会造成代码臃肿,同样的功能需要再编码一次

怎么办呢?

方法二把事件绑定在父容器上,事件冒泡的应用-事件代理,完美的减少了一半的函数

    <body>
          <ul id="list">
            <li>111</li>
            <li>222</li>
            <li>333</li>
          </ul>
          <button id="addli">添加</button>
      <script>
          var lists=document.querySelector('#list');
        var lis=document.querySelectorAll('li');//li列表类数组
        var addlis=document.querySelector('#addli');
        lists.addEventListener('click',function(e){
                console.log(e.target.innerText)
            });
        addlis.addEventListener('click',function(){
            var addli=document.createElement('li');
            addli.innerText='添加的li';
            lists.appendChild(addli);
        })
      </script>
    </body>
图片.png

这个方法就是利用事件冒泡的原理:

当点击在其中一个li子元素上时,冒泡到ul,不巧ul有一个绑定事件,这个绑定事件,正好是显示点击元素li的innerText

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 5,188评论 0 8
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 5,529评论 2 10
  • 第1章 鼠标事件 1-1 jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是...
    mo默22阅读 5,046评论 0 6
  • 网络零售江湖最终走向一天内送货上门和十分钟内送货上门,最后物流的效率才是网络零售成败的关键所在。 在万物互联的新时...
    天使投资人朱凯阅读 3,790评论 0 0
  • 楼主从大一的时候开始理财方面的学习,不是因为什么大事,一个是因为本人金牛座,一个是因为大学专业没钱没勇气反对父母...
    舍鱼fay阅读 929评论 0 0