1.什么是事件委托?
事件委托也称之为事件代理(Event Delegation),是JavaScript中常用绑定事件的常用技巧。
顾名思义,“事件代理”即是把原本需要绑定在子元素的响应事件委托给父元素,让父元素担当事件监听的职务。
事件代理的原理是DOM元素的事件冒泡。
总结一句话就是:不监听元素 C 自身,而是监听其祖先元素 P,然后判断 e.target 是不是该元素 C(或该元素的子元素)
有以下场景
场景1:
要给100个按钮添加点击事件?
答:监听这个100个按钮的祖先,等冒泡的时候判断target是不是这100个按钮中的一个。
场景2:
要监听目前不存在的元素的点击事件?
答:监听祖先,等点击的时候看看是不是监听的元素即可。
优点:省监听数(省内存),可以动态监听元素。
2.怎么阻止默认动作?
有一些 html 元素默认的行为,比如说 a 标签,点击后有跳转动作;form 表单中的 submit 类型的 input 有一个默认提交跳转事件;reset 类型的 input 有重置表单行为。
如果想阻止这些浏览器默认行为,可用e.preventDefault()和 return false方法。
如下代码:
let $a = document.getElementsByTagName("a")[0]; $a.onclick = function(e){
alert("跳转动作被我阻止了")
e.preventDefault();
//用 return false 也可以
}
// 默认事件没有了。
3. 怎么阻止事件冒泡?
w3c 的方法是 e.stopPropagation(),IE 则是使用 e.cancelBubble = true