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仿京东商品放大浏览页面
Jun 06 jQuery
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
Oct 19 jQuery
基于jQuery的$.getScript方法去加载javaScript文档解析
Nov 08 jQuery
jQuery图片加载失败替换默认图片方法汇总
Nov 29 jQuery
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 jQuery
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
Jan 08 jQuery
jquery.onoff实现简单的开关按钮功能(推荐)
May 24 jQuery
jQuery实现菜单的显示和隐藏功能示例
Jul 24 jQuery
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 jQuery
jQuery实现的卷帘门滑入滑出效果【案例】
Feb 18 jQuery
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
jquery实现点击左右按钮切换图片
Jan 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
那些年一起学习的PHP(一)
2012/03/21 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
详解php中 === 的使用
2016/10/24 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
JS 的应用开发初探(mootools)
2009/12/19 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
python去除字符串中的换行符
2017/10/11 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
python安装twisted的问题解析
2018/08/21 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
python Cartopy的基础使用详解
2020/11/01 Python
游戏商店:Eneba
2020/04/25 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
五年级语文教学反思
2014/01/30 职场文书
法律系毕业生求职信
2014/05/28 职场文书
上班迟到检讨书
2015/05/06 职场文书
放飞理想主题班会
2015/08/14 职场文书