JavaScript--------事件捕获

1. 事件传播的另一种形式是事件捕获。这就像事件冒泡,但顺序是相反的:事件是先在最小嵌套元素上发生,然后在连续更多的嵌套元素上发生,直到达到目标。

2. 事件捕获默认是禁用的,你需要在 addEventListener() 的 capture 选项中启用它。

在HTML文件中: 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <div id="container">
      <button>按钮</button>
    </div>
    <pre id="output"></pre>
  <script src="scripts/main1.js" defer></script>
</body>
</html>

在JS文件中:

const output = document.querySelector("#output");
function handleClick(e){
  output.textContent += `你在${e.currentTarget.tagName}元素上进行了点击\n`;
}
const container = document.querySelector("#container");
const button=document.querySelector("button");
document.body.addEventListener("click",handleClick,{capture:true});
container.addEventListener("click",handleClick,{capture:true});
button.addEventListener("click",handleClick);

结果展示:

发现消息出现的顺序发生了颠倒:<body> 事件处理器首先触发,然后是 <div> 的,最后是 <button>。

const output = document.querySelector("#output");
function handleClick(e){
  output.textContent += `你在${e.currentTarget.tagName}元素上进行了点击\n`;
}
const container = document.querySelector("#container");
const button=document.querySelector("button");
document.body.addEventListener("click",handleClick);
container.addEventListener("click",handleClick,{capture:true});
button.addEventListener("click",handleClick);

结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值