事件对象的属性和方法
1 2 3 4 5 6 7 8 9 10 | <div>123</div> <script> var div = document.querySelector( 'div' ); div.addEventListener( 'click' , function (e) { // e.target 和 this指向的都是div console.log(e.target); console.log( this ); }); </script> |
事件冒泡下的e.target和this
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <ul> <li>abc</li> <li>abc</li> <li>abc</li> </ul> <script> var ul = document.querySelector( 'ul' ); ul.addEventListener( 'click' , function (e) { // 我们给ul 绑定了事件 那么this 就指向ul console.log( this ); // ul // e.target 触发了事件的对象 我们点击的是li e.target 指向的就是li console.log(e.target); // li }); </script> |
阻止默认行为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <a href= "http://www.baidu.com" >百度</a> <script> //1不让链接跳转 td.innerHTML = '<a href="javascript:;">删除 </a>' ; // 2. 阻止默认行为 让链接不跳转 var a = document.querySelector( 'a' ); a.addEventListener( 'click' , function (e) { e.preventDefault(); // dom 标准写法 }); // 3. 传统的注册方式 a.onclick = function (e) { // 普通浏览器 e.preventDefault(); 方法 e.preventDefault(); // 低版本浏览器 ie678 returnValue 属性 e.returnValue = false ; // 我们可以利用return false 也能阻止默认行为 没有兼容性问题 return false ; } </script> |
给父元素注册事件,利用事件冒泡,当子元素的事件触发,会冒泡到父元素,然后去控制相应的子元素。
事件委托的作用
-
我们只操作了一次 DOM ,提高了程序的性能。
-
动态新创建的子元素,也拥有事件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <ul> <li>知否知否,点我应有弹框在手!</li> <li>知否知否,点我应有弹框在手!</li> <li>知否知否,点我应有弹框在手!</li> <li>知否知否,点我应有弹框在手!</li> <li>知否知否,点我应有弹框在手!</li> </ul> <script> // 事件委托的核心原理:给父节点添加侦听器, 利用事件冒泡影响每一个子节点 var ul = document.querySelector( 'ul' ); ul.addEventListener( 'click' , function (e) { // e.target 这个可以得到我们点击的对象 e.target.style.backgroundColor = 'pink' ; }) </script> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <body> 我是一段不愿意分享的文字 <script> // 1. contextmenu 我们可以禁用右键菜单 document.addEventListener( 'contextmenu' , function (e) { e.preventDefault(); }) // 2. 禁止选中文字 selectstart document.addEventListener( 'selectstart' , function (e) { e.preventDefault(); }) </script> </body> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <script> // 鼠标事件对象 MouseEvent document.addEventListener( 'click' , function (e) { // 1. client 鼠标在浏览器可视区的x和y坐标 console.log(e.clientX); console.log(e.clientY); console.log( '---------------------' ); // 2. page 鼠标在页面文档的x和y坐标 console.log(e.pageX); console.log(e.pageY); console.log( '---------------------' ); // 3. screen 鼠标在电脑屏幕的x和y坐标 console.log(e.screenX); console.log(e.screenY); }) </script> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?