javascript - 事件详解(阻止事件冒泡+阻止事件行为)
一、事件流#
1.事件流#
描述的是在页面中接受事件的顺序
2.事件冒泡#
由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点
(最具体 –> 最不具体)
3.事件捕获#
最不具体的节点先接收事件,而最具体的节点应该是最后接收事件
(最不具体 –> 最具体)
2.事件处理#
1.HTML事件处理
直接添加到HTML结构中
2.DOM0级事件处理
把一个函数赋值给一个事件处理程序属性
<button id="btn">按钮</button> <script type="text/javascript"> document.getElementById("btn").onclick = function () { alert("DOM0级事件处理1");//多个事件会被覆盖掉 } document.getElementById("btn").onclick = function () { alert("DOM0级事件处理2"); } </script>
3.DOM2级事件处理
addEventListener(“事件名”,”“事件处理函数”,“布尔值”)
当前版本,一般布尔值都不操作。
true:事件捕获
false:事件冒泡
removeEventListener();
<button id="btn">按钮</button> <button id="btn2">DOM2级按钮</button> <script type="text/javascript"> //document.getElementById("btn").onclick = function () { // alert("DOM0级事件处理1");//多个事件会被覆盖掉 //} //document.getElementById("btn").onclick = function () { // alert("DOM0级事件处理2"); //} var btn2 = document.getElementById("btn2"); btn2.addEventListener("click", function () { alert("DOM2级事件处理1"); }) btn2.addEventListener("click", demo1); btn2.addEventListener("click", demo2); function demo1() { alert("DOM2级事件处理2"); } function demo2() { alert("DOM2级事件处理3"); } //移除 //btn2.removeEventListener("click", demo2); </script>
4.IE事件处理程序
attachEvent
detachEvent
3.事件对象#
事件对象event
1).type:获取事件类型#
2).target:获取事件目标#
<div id="div1"> <button id="btn1">按钮</button> </div> <script type="text/javascript"> var btn1 = document.getElementById("btn1"); var div1 = document.getElementById("div1"); btn1.addEventListener("click", showType); div1.addEventListener("click", showDiv); function showType(event) { document.write(event.type+"<br>"); document.write(event.target + "<br>"); } function showDiv(event) { alert("div"); } </script>
3).stopPropagation():阻止事件冒泡#
没有调用showDiv,冒泡被取消了。
function showType(event) { document.write(event.type+"<br>"); document.write(event.target + "<br>"); //组织事件冒泡 event.stopPropagation(); }
4).preventDefault():组织事件默认行为#
(1)
<a id="aid" href="http://www.baidu.com">百度</a>
js
document.getElementById("aid").addEventListener("click", showaid); function showaid() { alert(1); }
(2)在showaid方法里面,添加
e.stopPropagation();//阻止事件冒泡
(3)阻止默认行为
function showaid(e) { alert(1); e.stopPropagation();//阻止事件冒泡 e.preventDefault();//阻止默认行为(这里是跳转baidu) }
作者:【唐】三三
出处:https://www.cnblogs.com/tangge/p/5669648.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
分类:
Web - javaScript
标签:
JavaScrip/Dom
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具