JavaScript中常见的事件处理程序有事件冒泡和事件捕获两种方式。其中,事件冒泡是最常见的一种方式,这也是所有主流浏览器默认的事件处理方式。
下面我们来看一下事件冒泡的具体实现。事件冒泡是从最深的节点开始,逐步向上传播事件,直到传递到其父元素或者最上层元素为止。举个例子,当你在一个嵌套式的HTML文档中同时点击里层div和外层div时,事件会先传递到最里层的div,再向外一层一层传递,直到传递到最外层的div或者document为止。
<!DOCTYPE html> <html> <head> <title>事件冒泡</title> </head> <body> <div id="div1"> <div id="div2"> <p id="p1">事件冒泡</p> </div> </div> </body> </html>
在上面的代码中,当你点击p1时,会弹出"点击了p1"的提示框;当你点击div2时,会弹出"点击了div2"的提示框;当你点击div1时,会弹出"点击了div1"的提示框。这三个div节点的绑定顺序是p1在div2中,div2在div1中。因此,事件冒泡的顺序是从p1开始,到div2,再到div1。
上面的代码中,我们使用了addEventListener()方法,这是HTML5新增的事件绑定方法。其中第三个参数是是否支持事件捕获,这里我们设置为false,即不支持事件捕获,也就是使用事件冒泡的方式处理事件。如果你希望使用事件捕获的方式处理事件,可以将这个参数设置为true。
done!