JavaScript基础教程(六十五)HTML DOM之EventListener:[特殊字符] 事件监听终极指南,告别onclick,拥抱addEventListener!

一、为什么告别传统事件处理?

传统HTML内联事件(如onclick="handler()")和DOM0级事件(如elem.onclick=handler)存在致命缺陷:

  • 重复绑定会覆盖前一个监听器
  • 无法精细控制冒泡/捕获阶段
  • 缺少移除监听的标准化方式

二、addEventListener 核心语法解密

element.addEventListener(eventType, handler, options);

第三个参数进化史:

  • 布尔值:控制捕获(true)或冒泡(false)

对象options:支持三个关键属性

{
  capture: false,   // 是否捕获阶段触发
  once: true,       // 只触发一次后自动移除
  passive: true     // 声明不阻止默认行为(优化滚动性能)
}

三、实战示例:点击计数器与事件委托

<ul id="container">
  <li>项目1 <button class="btn">点击</button></li>
  <li>项目2 <button class="btn">点击</button></li>
</ul>

<script>
  const container = document.getElementById('container');
  let count = 0;

  // 事件委托:利用冒泡在父级统一处理
  container.addEventListener('click', function(event) {
    if(event.target.classList.contains('btn')) {
      event.target.textContent = `已点击${++count}次`;
      
      // 阻止事件继续传播
      event.stopPropagation();
    }
  }, { passive: false }); // 允许preventDefault()

  // 单次执行示例
  document.addEventListener('userLogin', () => {
    console.log('用户登录事件(只触发一次)');
  }, { once: true });
</script>

四、最佳实践与性能优化

  1. 使用事件委托:减少内存占用,动态元素无需重新绑定

及时移除监听:避免内存泄漏

const handler = () => { /* ... */ };
element.addEventListener('click', handler);
// 需要移除时
element.removeEventListener('click', handler); // 必须传入相同引用
  1. passive模式:提升移动端滚动性能(默认无法preventDefault)

掌握现代事件监听机制,是构建复杂交互应用的基石。现在就从onclick升级到addEventListener吧!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值