简单理解
举个例子,要监听 ul
中 li
上的 click
事件,但 li
是动态生成的,可能还不存在,于是监听事件委托给父元素 ul
:
1 | ul.addEventListener("click", function (e) { |
但是这样存在问题:如果 li
里还有子元素 span
,点击的是 li
里的 span
, 无法触发 fn,显然不对。
完整代码
思路是遍历所点击元素的祖先元素,看其中有没有需要触发事件的元素:
1 | function delegate(element, eventType, selector, fn) { |