# 动态添加的元素增加事件addEventListener
使用事件委托,可以通过将事件添加到它们的父节点,而将事件委托给父节点来触发处理函数
k3.addEventListener("click", function(e){
if(e.target.nodeName=="I"){
$("#lcaddress").html(e.target.innerHTML)
selectdata.forEach(function(el,index){
console.log(el)
if(el.fencename===e.target.innerHTML){
console.log(el)
vvid=el.fenceid;
}
})
}
});
bottoms.addEventListener('click',function(e){
if(e.target.className=='peoplebtn'){
let parents=e.target.parentNode;
......
parents.insertBefore(fragment,e.target);
}
},true)
如果直接在document.body上进行事件委托,可能会带来额外的问题。由于浏览器在进行页面渲染的时候会有
合成的步骤,合成的过程会先将页面分成不同的合成层,而用户与浏览器进行交互的时候需要接收事件。此时,浏览器会将页面上具有事件处理程序的区域进行标记,被标记的区域会与主线程进行通信。
这时候整个页面都会被标记。即使页面不关心某些部分的用户交互,合成器线程也必须与主线程进行通信,并在每次事件发生时进行等待。这种情况,可以使用passive: true选项来解决。
产生等待是因为合成器线程于主线程进行通信。passive 设置为 true 时,表示 listener 永远不会调用 preventDefault。根据规范,passive 选项的默认值始终为 false,这引入了处理某些触摸事件(以及其他)的事件监听器在尝试处理滚动时阻止浏览器的主线程的可能性,从而导致滚动处理期间性能可能大大降低。