美文网首页让前端飞
据说80%的前端写出的事件委托都有bug

据说80%的前端写出的事件委托都有bug

作者: littleyu | 来源:发表于2018-12-25 14:25 被阅读13次

    事件委托是什么?有什么好处?

    • 假设父元素有一堆儿子,我不监听儿子们,而是监听父亲,看触发事件的是哪个儿子,这就是事件委托。
    • 还可以监听还没有出生的儿子(动态生成的元素节点),省监听器。
      事件委托嘛,随手就来一个
    function listen(element, eventType, selector, fn) {
      const el = document.querySelector(element)
      el.addEventListener(eventType, e => {
        if (e.target.matches(selector)) {
          fn.call(e.target, e)
        }
      })
    }
    

    相信大部分写出的代码都是这样子的把,

    本着能用就好,

    应付面试官也够用,

    就这么将就把,

    但是这串代码却是存在 BUG 的。

    再让我们继续来看看一个工资 12k+ 的前端写的时间委托代码

    function listen(element, eventType, selector, fn) {
      const f_element = document.querySelector(element)
      f_element.addEventListener(eventType, e => {
        let el = e.target
        while (!el.matches(selector)) {
          if (f_element === el) {
            el = null
            break
          }
          el = el.parentNode
        }
        el && fn.call(el, e)
      })
      return f_element
    }
    

    最后,拿去轻松愉快撸代码把~

    相关文章

      网友评论

        本文标题:据说80%的前端写出的事件委托都有bug

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