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实现放大镜简洁代码(推荐)
Jun 08 jQuery
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
jQuery Pagination分页插件_动力节点Java学院整理
Jul 17 jQuery
jquery ztree实现右键收藏功能
Nov 20 jQuery
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
Apr 26 jQuery
jQuery实现遍历XML节点和属性的方法示例
Apr 29 jQuery
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
Jul 10 jQuery
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
Aug 08 jQuery
jquery实现垂直手风琴菜单
Mar 04 jQuery
jQuery弹框插件使用方法详解
May 26 jQuery
jQuery实现简单全选框
Sep 13 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实现文件上传与下载实例与总结
2016/03/13 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
python实现根据图标提取分类应用程序实例
2014/09/28 Python
Python程序退出方式小结
2017/12/09 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
舞蹈兴趣小组活动总结
2014/07/07 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
组织委员竞选稿
2015/11/21 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
各国货币符号大全
2022/02/17 杂记