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插件制作 自增长输入框实现代码
Aug 17 jQuery
jQuery extend()详解及简单实例
May 06 jQuery
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
jquery实现企业定位式导航效果
Jan 01 jQuery
jquery动态添加以及遍历option并获取特定样式名称的option方法
Jan 29 jQuery
jQuery实现每隔一段时间自动更换样式的方法分析
May 03 jQuery
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
jquery获取img的src值实例介绍
Jan 16 jQuery
js/jQuery实现全选效果
Jun 17 jQuery
jQuery与原生JavaScript选择HTML元素集合用法对比分析
Nov 26 jQuery
jquery实现手风琴案例
May 04 jQuery
jQuery实现简单轮播图效果
Dec 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
php inc文件使用的风险和注意事项
2013/11/12 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
pip命令无法使用的解决方法
2018/06/12 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
python 实现绘制整齐的表格
2019/11/18 Python
python实现图片插入文字
2019/11/26 Python
python装饰器使用实例详解
2019/12/14 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
基于Python的OCR实现示例
2020/04/03 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
python代码实现图书管理系统
2020/11/30 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
三星法国官方网站:Samsung法国
2019/10/31 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
先进工作者获奖感言
2014/02/08 职场文书
离婚协议书范本2014
2014/10/27 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
MySQL 如何限制一张表的记录数
2021/09/14 MySQL
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js