zoukankan      html  css  js  c++  java
  • JS事件委托学习

    看codecademy 写练习JS 写烦气了
     
    然后在妙趣里面找教程练习实例
    教程果然是强悍的
     
    特对教程总结下部分内容。
     
     
    JS 事件委托就是利用冒泡原理,把事件加到父级上触发,执行效果。
    好处:
    1.提高性能
    2.新添加的元素还会有之前的事件
     
     
    <ul id="ul">
         <li>111111</li>
         <li>22222</li>
         <li>333333</li>
         <li>444444</li>
    </ul>
     
    这样一个HTML结构
      我想要给LI增加一个鼠标点击的效果通常写法
     
    window.onload = function(){
       var oUl = document.getElementById("ul");
       var oLi = oUl.getElementsByTagName("li")
       for(var i = 0; i <oLi.length; i++){
          oLi[i].onclick = function(){
             alert(123)
          }
       }
    }
     
    如果事件委托呢,我会把时间委托给ul  就把for 循环直接改
     
    oUl.onclick = function(){
         alert(1123)
    }
     
    接下来我们想写过一个,给LI加一个鼠标经过的效果 默认我肯定会这样写:
     
    window.onload = function(){
       var oUl = document.getElementById("ul");
       var oLi = oUl.getElementsByTagName("li")
       for(var i = 0; i <oLi.length; i++){
          oLi[i].onmouseover = function(){
             this.style.background = "red"
          }

          oLi[i].onmouseout = function(){
             this.style.background = ""
          }
       }
    }
     
    如果我用事件委托的写法:
     
    event对象,事件源,无论你操作等你个对象的事件
     
    event对象有兼容想
     
     IE  :window.event.srcElement;
    标准  : event.target;
     

    window.onload = function(){
       var oUl = document.getElementById("ul");
       var oLi = oUl.getElementsByTagName("li")

       oUl.onmouseover = function(ev){
           var ev = ev || window.event; //事件
           var target =  ev.targe || ev.srcElement; //事件源,不管在哪个事件中,只要你操作的那个元素就是事件源
           if(ev.target.nodeName.toLocaleLowerCase()=="li"){   // 事件在LI 上面才执行增加背景颜色
              ev.target.style.background = "red"
           }

       }
       oUl.onmouseout = function(ev){
           var ev = ev || window.event;
           var target =  ev.targe || ev.srcElement;
           ev.target.style.background = ""
       }

    }
     
    新增加元素还会有原来的事件总代码
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script>
    window.onload = function(){
       var oUl = document.getElementById("ul");
       var oLi = oUl.getElementsByTagName("li")
       var obtn = document.getElementById("input");
       var iNow =4;
       oUl.onmouseover = function(ev){
           var ev = ev || window.event; //事件源,不管在哪个事件中,只要你操作的那个元素就是事件源
           var target =  ev.targe || ev.srcElement;
           if(ev.target.nodeName.toLocaleLowerCase()=="li"){
              ev.target.style.background = "red"
           }

       }
       oUl.onmouseout = function(ev){
           var ev = ev || window.event;
           var target =  ev.targe || ev.srcElement;
           ev.target.style.background = ""
       }

       obtn.onclick=function(){
          iNow++;
          var oLi = document.createElement("li");
          oLi.innerHTML = iNow * 11111;
          oUl.appendChild(oLi)
       }
    }


    </script>
    </head>

    <body>
    <input type = "button"  value= "增加" id = "input" />
    <ul id="ul">
         <li>111111</li>
         <li>22222</li>
         <li>333333</li>
         <li>444444</li>
      </ul>
    </body>
    </html>




  • 相关阅读:
    beagle ubuntu
    screen usage
    centos install nginx¢os 添加网易源
    心情舒畅,升级到u10.04了
    nginx 运行,检测
    联通宽带测速
    virtualenv usage
    linux 终端下utf8 和gbk相互转换
    [梦]2005725
    git install on centos
  • 原文地址:https://www.cnblogs.com/zjx2011/p/2721081.html
Copyright © 2011-2022 走看看