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实现tab键进行选择后enter键触发click行为
Mar 29 jQuery
jQuery中的deferred对象和extend方法详解
May 08 jQuery
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 jQuery
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
jQuery实现轮播图及其原理详解
Apr 12 jQuery
jquery获取img的src值实例介绍
Jan 16 jQuery
使用jquery的cookie实现登录页记住用户名和密码的方法
Mar 13 jQuery
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
Jun 06 jQuery
jQuery操作事件完整实例分析
Jan 10 jQuery
jQuery实时统计输入框字数及限制
Jun 24 jQuery
jQuery插件实现图片轮播效果
Oct 19 jQuery
jQuery实现手风琴特效
Jan 11 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 删除无限级目录与文件代码共享
2008/11/22 PHP
php 文章采集正则代码
2009/12/28 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
2017/04/24 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
vue实现购物车列表
2020/06/30 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
应届毕业生应聘自荐信范文
2014/02/26 职场文书
工作会议主持词
2014/03/17 职场文书
党员评议思想汇报
2014/10/08 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
Docker官方工具docker-registry案例演示
2022/04/13 Servers