[DOM Event Learning] Section 1 DOM Event 处理器绑定的几种方法
[DOM Event Learning] Section 1 DOM Event处理器绑定的几种方法
网页中经常需要处理各种事件,通常的做法是绑定listener对事件进行监听,当事件发生后进行一些特定处理.
监听事件的几种方法如下文.
第一种,写在页面标签里面
<button onclick="alert('Hello')">Say hello</button>
上面这行代码,将按钮点击后的弹窗操作在标签声明的时候就绑定了.
这是一种糟糕的方法,原因如下:
1.View code(HTML)和交互code(JS)强耦合了.这意味着每次我们想改方法,都需要编辑HTML.
2.可扩展性差.如果这个方法需要被附加在多个元素上,重复的代码会让页面膨胀,并且维护困难.
第二种,用JavaScript设置元素对应的onXXX事件属性
如代码:
<!DOCTYPE html> <html> <head> <script type="text/javascript"> window.onload = function () { // Event binding using onXXX property from JavaScript var helloBtn = document.getElementById("helloBtn"); helloBtn.onclick = function (event) { alert("Hello Button"); } } </script> </head> <body> <button id="helloBtn">Say hello</button> </body> </html>
这种方法比较简单,并且会覆盖之前的handler,也没有什么浏览器兼容的问题.
第三种,使用addEventListener()方法
获取元素之后,可以用addEventListener()方法:
<!DOCTYPE html> <html> <head> <script type="text/javascript"> window.onload = function () { // Event binding using addEventListener var helloBtn = document.getElementById("helloBtn"); helloBtn.addEventListener("click", function (event) { alert("Hello."); }, false); } </script> </head> <body> <button id="helloBtn">Say hello</button> </body> </html>
这种方法在现代的浏览器上是工作良好的,但是在IE9之前的IE浏览器是没有这个方法的,它们用attachEvent().
第四种,使用jQuery的方法进行事件处理器绑定
jQuery为我们处理了这种不兼容问题,因此可以用jQuery的方法来绑定事件:
// Event binding using a convenience method $("#helloBtn").click(function (event) { alert("Hello."); });
jQuery监听事件有很多种方法:
// The many ways to bind events with jQuery // Attach an event handler directly to the button using jQuery's // shorthand `click` method. $("#helloBtn").click(function (event) { alert("Hello."); }); // Attach an event handler directly to the button using jQuery's // `bind` method, passing it an event string of `click` $("#helloBtn").bind("click", function (event) { alert("Hello."); }); // As of jQuery 1.7, attach an event handler directly to the button // using jQuery's `on` method. $("#helloBtn").on("click", function (event) { alert("Hello."); }); // As of jQuery 1.7, attach an event handler to the `body` element that // is listening for clicks, and will respond whenever *any* button is // clicked on the page. $("body").on({ click: function (event) { alert("Hello."); } }, "button"); // An alternative to the previous example, using slightly different syntax. $("body").on("click", "button", function (event) { alert("Hello."); });
jQuery 1.7开始,所有的事件绑定方法最后都是调用.on()方法.
上面这个例子中,前三个方法调用是等价的.
第四个和第五个方法,监听的是body上所有button元素的click事件.
DOM树里更高层的一个元素监听发生在它的children元素上的事件,这个过程叫做事件代理(event delegation).
参考资料
Introducing Events: http://learn.jquery.com/events/introduction-to-events/
Event reference: https://developer.mozilla.org/en-US/docs/Web/Events
分类:
JavaScript
, jQuery
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2014-03-20 《The Linux Command Line》 读书笔记04 Linux用户以及权限相关命令