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实现动态添加、删除按钮及input输入框的方法
Apr 27 jQuery
jQuery操作之效果详解
May 19 jQuery
基于jQuery实现图片推拉门动画效果的两种方法
Aug 26 jQuery
jquery在vue脚手架中的使用方式示例
Aug 29 jQuery
jQuery中each方法的使用详解
Mar 18 jQuery
jQuery中图片展示插件highslide.js的简单dom
Apr 22 jQuery
jquery 动态遍历select 赋值的实例
Sep 12 jQuery
jQuery实现表格的增、删、改操作示例
Jan 27 jQuery
jQuery实现简单的Ajax调用功能示例
Feb 15 jQuery
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
Jun 04 jQuery
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
Jun 18 jQuery
jquery实现的放大镜效果示例
Feb 24 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/01/10 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
Python解析xml中dom元素的方法
2015/03/12 Python
python计算N天之后日期的方法
2015/03/31 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
Python多线程获取返回值代码实例
2020/02/17 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
如何用Python绘制3D柱形图
2020/09/16 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
考试不及格检讨书
2014/01/09 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
债务纠纷委托书
2014/08/30 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
离婚案件上诉状
2015/05/23 职场文书
在 Python 中利用 Pool 进行多线程
2022/04/24 Python