您现在的位置:首页 >> 前端 >> 内容

js中的事件委托

时间:2016/11/24 9:25:00 点击:

  核心提示:js中的事件委托事件委托: 利用冒泡原理,把事件加到父级,触发执行效果.好处1 提高性能- 例子1ul id=ulli000001/lili000002/lili000003/li/ulscript ...

js中的事件委托

事件委托: 利用冒泡原理,把事件加到父级,触发执行效果.

好处1 提高性能

- 例子1

<ul id="ul">
    <li>000001</li>
    <li>000002</li>
    <li>000003</li>
  </ul>
  <script type="text/javascript">
    var ul = document.getElementById('ul');
    var li = ul.getElementsByTagName('li');
    //用事件委托,通过li的父元素ul,给li添加点击事件
    ul.onmouseover = function (event) {
 
    // event对象用于存储事件的数据,例如触发事件的元素、鼠标的位置及状态、按下的键等等;
    // event对象只在事件发生的过程中才有效。
    // firefox跟IE使用的event的方法不同,IE的event是全局变量,随时可用;firefox需要在事件方法的参数里写event才能用,是运行时的临时变量。
    // 在IE/Opera中是window.event,在Firefox中是event;
 
     var event = event || window.event; //event对象
     var target = event.target || event.srcElement; //onmouseover事件的调用者
     if (target.nodeName.toLowerCase() == 'li') { // onmouseover事件的调用者的DOM元素标签名
       target.style.background = 'red';
     }
    }
    ul.onmouseout = function (event) {
      var event = event || window.event;
      var target = event.target || event.srcElement;
      if (target.nodeName.toLowerCase() == 'li') {
        target.style.background = '';
      }
    }
  </script>

好处2 动态添加的元素,也会被绑定li该有的事件

- 例子2

<input type="button" id="btn" value="添加li">
<ul id="ul">
  <li>111111</li>
  <li>22222</li>
  <li>33333</li>
</ul>
 <script type="text/javascript">
   //获取元素
   var ul = document.getElementById('ul');
   var btn = document.getElementById('btn');
   //鼠标覆盖
   ul.onmouseover = function (event) {
     var event = event || window.event;
     var target = event.target || event.srcElement;
     if (target.nodeName.toLowerCase() == 'li') {
       target.style.background = 'red';
     }
   }
   //鼠标离开
   ul.onmouseout = function (event) {
     var event = event || window.event;
     var target = event.target || event.srcElement;
     if (target.nodeName.toLowerCase() == 'li') {
       target.style.background = '';
     }
   }
   //点击添加li按钮
   btn.onclick = function () {
     var lisLength = ul.getElementsByTagName('li').length;
     var newLi = document.createElement('li');
     newLi.innerHTML = 11111*(lisLength+1);
     ul.appendChild(newLi);
   }
 </script>

Tags:JS S中 中的 的事 
作者:网络 来源:Abner_Yan的