什么是事件委托?怎么阻止默认动作?怎么阻止事件冒泡?

467 阅读1分钟

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