jQuery事件委托代码实践详解


Posted in jQuery onJune 21, 2019

javascript的事件模型,采用"冒泡"模式,子元素的事件会逐级向上"冒泡",成为父元素的事件。

在需要为较多的元素绑定事件时应该使用事件委托 event delegation

javascript事件传播

html如下:

<body>
<table>
<tr><td id="targetTd"></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td></tr>
</table>
</body>

添加脚本:

targetTd.onclick = function (event) {
console.log("Td is clicked");
};
document.body.onclick = function (event) {
console.log("Body is clicked");
};

点击td targetTd,结果如下:

Td is clicked
Body is clicked

使用stopPropagation可以阻止事件的传播(ie下使用cancelBubble)

eg:

targetTd.onclick = function (event) {
console.log("Td is clicked");
event.stopPropagation();
};
document.body.onclick = function (event) {
console.log("Body is clicked");
};

点击td targetTd,结果如下:

Td is clicked

js事件委托

如果我们想给上面的table中所有的td添加点击事件,可以通过循环绑定,或者是采用事件委托方式,如下:

document.body.onclick = function (event) {
if(event.target.tagName === "TD"){
console.log(event.target.tagName+" is clicked");
}
};

jQuery事件委托

jquery 事件绑定 on 方法定义如下:

.on( events [, selector ] [, data ], handler(eventObject) )

取消事件的绑定可以使用off

$(document).off("click", "td");

给td绑定点击事件可以使用:

$("td").on("click", function(e){
console.log(e.target.tagName+" is clicked");
});

加入selector参数,使用事件委托

$("table").on("click", "td", function(){
console.log(e.target.tagName+" ");
});

或者:

$(document).on("click", "td", function(){
console.log(e.target.tagName+" ");
});

此时事件冒泡到document或者table时会监测是否是td selector,匹配时会触发事件

jQuery 相关文章推荐
jQuery日程管理控件glDatePicker用法详解
Mar 29 jQuery
jquery append与appendTo方法比较
May 24 jQuery
jQuery修改DOM结构_动力节点Java学院整理
Jul 05 jQuery
基于jQuery Easyui实现登陆框界面
Jul 10 jQuery
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 jQuery
jquery获取file表单选择文件的路径、名字、大小、类型
Jan 18 jQuery
jQuery事件多次绑定与解绑问题实例分析
Feb 19 jQuery
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
Javascript和jquery在selenium的使用过程
Oct 31 jQuery
jQuery操作元素追加内容示例
Jan 10 jQuery
jQuery实现简单QQ聊天框
Aug 27 jQuery
jQuery实现文本显示一段时间后隐藏的方法分析
Jun 20 #jQuery
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 #jQuery
使用JQuery自动完成插件Auto Complete详解
Jun 18 #jQuery
使用异步controller与jQuery实现卷帘式分页
Jun 18 #jQuery
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
Jun 18 #jQuery
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 #jQuery
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 #jQuery
You might like
thinkphp的c方法使用示例
2014/02/24 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
JavaScript 的继承
2011/10/01 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
python write无法写入文件的解决方法
2019/01/23 Python
Python集合操作方法详解
2020/02/09 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
汽修专业自荐信
2014/07/07 职场文书
平面设计师岗位职责
2014/09/18 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis
解析MySQL索引的作用
2022/03/03 MySQL
golang使用map实现去除重复数组
2022/04/14 Golang
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js