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实现表格冻结顶栏效果
Aug 20 jQuery
详解jquery插件jquery.viewport.js学习使用方法
Sep 08 jQuery
jQuery中过滤器的基本用法示例
Oct 11 jQuery
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
详解JQuery基础动画操作
Apr 12 jQuery
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
jquery实现吸顶导航效果
Jan 08 jQuery
jquery传参及获取方式(两种方式)
Feb 13 jQuery
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 jQuery
js和jquery判断数据类型的4种方法总结
Aug 28 jQuery
jQuery+ajax实现文件上传功能
Dec 22 jQuery
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 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
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
python机器学习理论与实战(二)决策树
2018/01/19 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
高中军训第一天感言
2014/03/06 职场文书
节能环保标语
2014/06/12 职场文书
借名购房协议书范本
2014/10/06 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
办公室规章制度范本
2015/08/04 职场文书
小数乘法教学反思
2016/02/22 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis