
[DOM Event Learning] Section 1 DOM Event 处理器绑定的几种方法
发布日期:2021-05-09 05:17:33
浏览次数:13
分类:博客文章
本文共 1918 字,大约阅读时间需要 6 分钟。
[DOM Event Learning] Section 1 DOM Event处理器绑定的几种方法
网页中经常需要处理各种事件,通常的做法是绑定listener对事件进行监听,当事件发生后进行一些特定处理.
监听事件的几种方法如下文.
第一种,写在页面标签里面
上面这行代码,将按钮点击后的弹窗操作在标签声明的时候就绑定了.
这是一种糟糕的方法,原因如下:
1.View code(HTML)和交互code(JS)强耦合了.这意味着每次我们想改方法,都需要编辑HTML.
2.可扩展性差.如果这个方法需要被附加在多个元素上,重复的代码会让页面膨胀,并且维护困难.
第二种,用JavaScript设置元素对应的onXXX事件属性
如代码:
这种方法比较简单,并且会覆盖之前的handler,也没有什么浏览器兼容的问题.
第三种,使用addEventListener()方法
获取元素之后,可以用addEventListener()方法:
这种方法在现代的浏览器上是工作良好的,但是在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:
Event reference:
addEventListener:
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年03月28日 00时45分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
算法笔记_069:Floyd算法简单介绍(Java)
2021-05-09
Python学习笔记_05:使用Flask+MySQL实现用户登陆注册以及增删查改操作
2021-05-09
Deepin_使用Python+MySQL创建工作日志记录
2021-05-09
dpdk在虚拟机上出错处理
2021-05-09
Macbook 彻彻底底的卸载MySQL
2021-05-09
ASP.NET Core 一步步搭建个人网站(4)_主页和登录验证
2021-05-09
SQL Server 列存储索引 第二篇:设计
2021-05-09
ADF 第五篇:转换数据
2021-05-09
Databricks 第4篇:pyspark.sql 分组统计和窗口
2021-05-09
Execute SQL Task 第二篇:返回结果集
2021-05-09
SSISDB2:SSIS工程的操作实例
2021-05-09
业务工作流平台设计(七)
2021-05-09
业务工作流平台设计(八)
2021-05-09
大视角、大方向、大问题、大架构:(二)应用的相关问题
2021-05-09
文件上传C:\fakepath\解决方案
2021-05-09
java计算某日期之后的日期
2021-05-09
Java调用WebService之Axis实现
2021-05-09
SpringBoot Web(SpringMVC)
2021-05-09
javascript 之对象-13
2021-05-09
解决:angularjs radio默认选中失效问题
2021-05-09