当前位置: 首页 > ai >正文

js绑定事件

一、基础绑定方法
1.HTML内联事件(不推荐)

直接在html标签中定义事件:

<button onclick="alert('Clicked')">按钮</button>

2.dom属性绑定

const btn = document.querySelector('button');
btn.onclick = function() { console.log('事件1'); };
// 会覆盖前一个事件
btn.onclick = function() { console.log('事件2'); }; 

3.addEventListener(推荐)

btn.addEventListener('click', function() {console.log('事件A'); // 不会覆盖其他事件
});
btn.addEventListener('click', function() {console.log('事件B'); // 按添加顺序执行
});

二、事件处理进阶
1.事件对象(event)

btn.addEventListener('click', function(e) {console.log(e.target); // 触发事件的元素e.stopPropagation();   // 阻止事件冒泡
});

2.事件委托
(1)定义与原理‌
事件委托是一种通过‌事件冒泡机制‌,将子元素的事件处理统一绑定到父元素的优化技术。其核心在于:

‌事件冒泡‌:当子元素触发事件时,事件会‌从触发元素逐层向上传递至父元素‌,直至文档根节点。
‌父元素代理‌:在父元素上监听目标事件(如 click),通过 event.target 识别实际触发事件的子元素并执行逻辑。
利用事件冒泡优化性能:
‌(2)核心作用‌
‌性能优化‌

减少事件处理器数量,避免为大量子元素单独绑定事件,降低内存消耗。
动态新增或删除子元素时,无需重新绑定事件。
‌代码简化‌

统一管理事件逻辑,降低维护复杂度。

document.getElementById('list').addEventListener('click', function(e) {if (e.target.tagName === 'LI') {console.log('点击了列表项:', e.target.textContent);}
});

注意事项‌
‌阻止事件冒泡‌:若子元素调用 e.stopPropagation(),事件委托将失效。
‌事件类型‌:仅支持会冒泡的事件(如 click),不适用于 focus、blur 等无冒泡机制的事件。
3.移出事件

const handler = function() { console.log('仅触发一次'); };
btn.addEventListener('click', handler);
btn.removeEventListener('click', handler); // 移除指定事件

三、现代实践(es6+)
1.剪头函数注意点

btn.addEventListener('click', () => {console.log(this); // 箭头函数的this指向外层上下文
});

2.一次性事件

btn.addEventListener('click', () => {console.log(this); // 箭头函数的this指向外层上下文
});

四、兼容性与最佳实践
兼容性‌:addEventListener 支持IE9+,低版本需用attachEvent。
‌性能‌:事件委托减少内存占用,尤其适合动态生成的元素。
‌解耦‌:避免HTML内联事件,保持JS与HTML分离。

http://www.xdnf.cn/news/7626.html

相关文章:

  • RabbitMQ ⑤-顺序性保障 || 消息积压 || 幂等性
  • 在CuPy中使用多节点多GPU环境
  • C#基础:yield return关键字的特点
  • 2025ICPC武汉邀请赛-F
  • 游戏启动DLL文件缺失怎么解决 解决dll问题的方法
  • Vue学习路线
  • leetcode hot100刷题日记——6.和为 K 的子数组
  • 【Axure视频教程】动态地图路线
  • 实现rpc通信机制(待定)
  • R语言空间分析实战:地理加权回归联合主成份与判别分析破解空间异质性难题
  • 封装POD与PinMap文件总结学习-20250516
  • Go 语言简介
  • 操作系统的基础概念
  • 初步认识HarmonyOS NEXT端云一体化开发
  • AbMole| Phorbol 12-myristate 13-acetate(CAS号16561-29-8;目录号M4647)
  • vue+threeJs 生成烟花效果
  • PEFT简介及微调大模型DeepSeek-R1-Distill-Qwen-1.5B
  • 【css知识】flex-grow: 1
  • LibreHardwareMonitor:.Net开发的开源硬件监控项目
  • 中国机加工的市场概况及冷镦技术对于机加工替代的趋势
  • 如何在 Windows 11/10 PC 上擦除外部硬盘驱动
  • 什么叫生成式人工智能?职业技能的范式转移与能力重构
  • HarmonyOS5云服务技术分享--云存储SDK文章整理
  • 2025年 全国青少年信息素养大赛 算法创意挑战赛C++ 初中组 初赛真题
  • 94.LabelGrid 的遍历与属性编辑 Maui例子 C#例子
  • BioID技术:探索蛋白质相互作用的新方法
  • Java 05正则表达式
  • Linux中FTP服务命令使用与NFS服务
  • JavaScript的Button的contentItem属性
  • 企业建私有云,选择K8S方案会怎么样?