美文网首页
JavaScript事件代理(事件委托)

JavaScript事件代理(事件委托)

作者: acsamson | 来源:发表于2019-05-26 17:06 被阅读0次

    简单说下为什么要有事件委托
    比如我们有1w个li, 要实现每个li点击触发事件, 如果对每个li都进行事件绑定那就太耗性能了
    不科学
    因此把点击事件绑定在父元素就好了, 例如ui上
    当发生li点击事件的时候冒泡到父元素上, 然后父元素再去找是哪个子元素被点击了
    因此只要绑定一个监听事件在父元素上就好了

    /*
    @param  parentElem 父元素
    @param  type 事件类型
    @param  childElem 子元素
    @param  fn 触发的事件
    */
    function bindEvent(parentElem, type, childElem, fn) {
      if (fn == null) {
        fn = childElem;
        childElem = null;
      }
      // 委托给父元素
      parentElem.addEventListener(type, e => {
        var target;
        // 如果有孩子元素就代表要做事件处理
        if (childElem) {
          target = e.target(); // 代表获取当前触发事件的元素
          if (target.matches(childElem)) {
            fn.call(target, e); // 指定触发元素为target上下文, 传入事件
          } else {
            fn(e); //如果没有我要的子元素就不用进行事件代理
          }
        }
      });
    }
    

    相关文章

      网友评论

          本文标题:JavaScript事件代理(事件委托)

          本文链接:https://www.haomeiwen.com/subject/srrftctx.html