最近一直在找工作,相信事件冒泡、事件捕获对于web前端来说,是个很重要的点,现在在学习过程中做个总结。
什么是js事件冒泡?
官方:事件开始时由具体的元素接收,然后逐级向上传播到较为不具体的节点。(IE5.5及更早版本会跳过<html>,从body直接跳到document),IE9、firefox、chrome等事件会一直冒泡到window对象
自己的理解:当设定了多个div的嵌套时,即建立了父子关系,当父div与子div共同加入了onclick事件时,当触发子div的onclick事件后,子div进行相应的JS操作,但是父div的onclick事件同样会被触发,这就造成了事件的并发,导致页面混乱。
怎样阻止事件冒泡:在w3c标准里调用event.stopPropagation()
在IE下通过设置window.event.cancelBubble=true来实现。
什么是事件捕获?
官方:(事件捕获的思想)不太具体的节点应该更早接收到事件,而更具体的节点应该最后接收到事件。
注意:IE的内核是没有捕获事件的过程。
举例说明:
<!DOCTYPE html>
<html>
<head>
<title>event bubble</title>
</head>
<body>
<div id='div'>click me</div>
</body>
</html>
事件冒泡:div->body->html->document
事件捕捉:document->html->body->div