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 相关文章推荐
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 jQuery
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
jquery在vue脚手架中的使用方式示例
Aug 29 jQuery
jQuery实现简单的计时器功能实例分析
Aug 29 jQuery
jquery实现用户登陆界面(示例讲解)
Sep 06 jQuery
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 jQuery
jQuery代码优化方法总结
Jan 29 jQuery
jQuery中元素选择器(element)简单用法示例
May 14 jQuery
jQuery实现参数自定义的文字跑马灯效果
Aug 15 jQuery
jQuery实现鼠标滑动切换图片
May 27 jQuery
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 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使用百度翻译api示例分享
2014/01/31 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
Python实现截屏的函数
2015/07/25 Python
关于Django外键赋值问题详解
2017/08/13 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
python字典按照value排序方法
2020/12/28 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
学生档案自我鉴定
2013/10/07 职场文书
高中生自我鉴定范文
2013/10/30 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
公司门卫岗位职责
2014/03/15 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
公共场所标语
2014/06/30 职场文书
毕业生找工作求职信
2014/08/05 职场文书
辩护词格式
2015/05/22 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
vue 实现上传组件
2021/05/31 Vue.js
DQL数据查询语句使用示例
2022/12/24 MySQL