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插件之validation插件
Mar 29 jQuery
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
jquery replace方法去空格
May 08 jQuery
浅谈struts1 &amp; jquery form 文件异步上传
May 25 jQuery
jQuery.form.js的使用详解
Jun 14 jQuery
jquery图片放大镜效果
Jun 23 jQuery
jQuery Form插件使用详解_动力节点Java学院整理
Jul 17 jQuery
javaScript和jQuery自动加载简单代码实现方法
Nov 24 jQuery
jquery animate动画持续运动的实例
Nov 29 jQuery
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 jQuery
使用异步controller与jQuery实现卷帘式分页
Jun 18 jQuery
jQuery插件simplePagination的使用方法示例
Apr 28 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
用js传递value默认值的示例代码
2014/09/11 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
实例讲解JS中pop使用方法
2019/01/27 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
深入理解Python对Json的解析
2017/02/14 Python
Python实现的选择排序算法示例
2017/11/29 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
如何写出好的Java代码
2014/04/25 面试题
生产部统计员岗位职责
2014/01/05 职场文书
自荐信的格式
2014/03/10 职场文书
设备管理实施方案
2014/05/31 职场文书
中职生自荐信范文
2014/06/15 职场文书
工作求职信
2014/07/04 职场文书
党课培训心得体会
2014/09/02 职场文书
终止劳动合同协议书
2014/10/05 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
教师党员个人自我评价
2015/03/04 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
nginx前后端同域名配置的方法实现
2021/03/31 Servers
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript