栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript什么是事件冒泡和捕获?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript什么是事件冒泡和捕获?

事件冒泡和捕获是HTML DOM
API中事件传播的两种方式,当事件发生在另一个元素内部的元素中,并且两个元素都已注册了该事件的句柄时。事件传播模式确定元素以什么顺序接收事件。

冒泡时,事件首先由最内层元素捕获和处理,然后传播到外层元素。

通过捕获,事件首先被最外面的元素捕获并传播到内部元素。

捕获也称为“滴答”,它有助于记住传播顺序:

down流,冒泡

过去,Netscape提倡事件捕获,而Microsoft提倡事件冒泡。两者都是W3C 文档对象模型事件标准(2000)的一部分。

IE <9 仅使用事件冒泡,而IE9 +和所有主流浏览器均支持。另一方面,对于复杂的DOM ,事件冒泡的性能可能会稍低。

我们可以

addEventListener(type, listener,useCapture)
在冒泡(默认)或捕获模式下使用来注册事件处理程序。要使用捕获模型,请将第三个参数传递为
true

<div>    <ul>        <li></li>    </ul></div>

在上面的结构中,假定

li
元素中发生了单击事件。

在捕获模型中,事件将首先处理(将

div
首先
div
触发will 中的click事件处理程序),然后在中处理
ul
,然后在目标元素中最后处理
li

在冒泡模型中,将发生相反的情况:事件将首先由

li
,然后由
ul
,最后由
div
元素处理。

在下面的示例中,如果单击任何突出显示的元素,则可以看到事件传播流的捕获阶段首先发生,然后是冒泡阶段。

var logElement = document.getElementById('log');function log(msg) {    logElement.innerHTML += ('<p>' + msg + '</p>');}function capture() {    log('capture: ' + this.firstChild.nodevalue.trim());}function bubble() {    log('bubble: ' + this.firstChild.nodevalue.trim());}function clearOutput() {    logElement.innerHTML = "";}var divs = document.getElementsByTagName('div');for (var i = 0; i < divs.length; i++) {    divs[i].addEventListener('click', capture, true);    divs[i].addEventListener('click', bubble, false);}var clearButton = document.getElementById('clear');clearButton.addEventListener('click', clearOutput);p {    line-height: 0;}div {    display:inline-block;    padding: 5px;    background: #fff;    border: 1px solid #aaa;    cursor: pointer;}div:hover {    border: 1px solid #faa;    background: #fdd;}<div>1    <div>2        <div>3 <div>4     <div>5</div> </div>        </div>    </div></div><button id="clear">clear output</button><section id="log"></section>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号