jQuery中on方法使用注意事项详解


Posted in Javascript onFebruary 15, 2017

on(eventType,[childSelector],[data],fn)

采用事件委托机制绑定事件,好处是子元素动态加入时无需再次绑定。

on方法可以传入childSelector指定添加事件处理函数的具体子元素,还可以传入对象格式的数据data,fn函数内部通过event.data.XXX获取具体参数。传入事件处理函数的data需要在事件绑定时就确定好,不同于trigger('eventType',[data]),tirgger方法中传入的data(对象或数组形式)是事件发生时才计算的值。

如果同一个事件处理程序被多次绑定给同一个元素,触发时就会执行多遍。所以绑定之前,需要先解绑之前的相同事件:

$(“selector”).off("click.xxx").on('click.xxx',function(){…});

如要在同一个元素上绑定不同事件处理函数,可以用事件的命名空间加以区分:click.forSpan、click.forDiv。

delegate()的源码是调用on()方法,只不过参数顺序变了,所以统一用on()。

事件触发顺序:

target是触发事件的元素,不会变;currentTarget是事件处理函数当前所在的元素,会动态变化;delegateTarget是事件处理函数绑定的对象,不会变。

on方法利用了事件冒泡机制,事件会从事件源一直冒泡传递到document,并触发相应元素的事件处理函数(若有)。

jQuery中on方法使用注意事项详解

事件处理队列:从触发事件的元素开始,遍历至delegateTarget,查找childSelector所指定的元素节点,并在事件处理队列handlerQueue中压入事件处理函数,最后将delegateTarget元素直接绑定的事件处理也压入队列(委托事件先于直接绑定的)。

on方法的冒泡过程中,具有事件处理函数的是delegateTarget元素而不是childSelector元素。

$("div").on('click','span',function(event){
 alert("The span element was clicked.");
 });
 $("p").click(function(event){
 
alert("The p element was clicked.");
 });
 $("div").click(function(){
 
alert("The div element was clicked.");
 });

点击span元素时,span元素上没有绑定事件处理函数,冒泡传递到P元素,P元素有直接绑定的事件处理函数,最先弹出P;然后传递到最外层div元素,div元素有事件委托,jQuery会从target (span)遍历到delegateTarget (div),查找childSelector节点,并压入事件处理队列中。最后压入delegateTarget (div)元素直接绑定的事件处理函数。所以会弹出Span后弹出Div。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
限制复选框的最大可选数
Jul 01 Javascript
javascript性能优化之事件委托实例详解
Dec 12 Javascript
Bootstrap插件全集
Jul 18 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
Apr 20 Javascript
JS实现简易的图片拖拽排序实例代码
Jun 09 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
详解Vue中watch的高级用法
May 02 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
浅谈关于iview表单验证的问题
Sep 29 Javascript
JavaScript时间日期操作实例小结【5个示例】
Dec 22 Javascript
JavaScript实现星级评价效果
May 17 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
Sep 02 Javascript
防止重复发送 Ajax 请求
Feb 15 #Javascript
Input文本框随着输入内容多少自动延伸的实现
Feb 15 #Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
Feb 15 #Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
Feb 15 #Javascript
Canvas 绘制粒子动画背景
Feb 15 #Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
Feb 15 #Javascript
js控制按钮,防止频繁点击响应的实例
Feb 15 #Javascript
You might like
图形数字验证代码
2006/10/09 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
jQuery中:input选择器用法实例
2015/01/03 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
python中pass语句用法实例分析
2015/04/30 Python
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
Python科学计算之Pandas详解
2017/01/15 Python
使用Python对Excel进行读写操作
2017/03/30 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
Numpy 多维数据数组的实现
2020/06/18 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
土木工程专业个人求职信
2013/12/30 职场文书
三爱活动实施方案
2014/03/19 职场文书
2014年计生标语
2014/06/23 职场文书
作风转变年心得体会
2014/10/22 职场文书
校运会加油稿大全
2015/07/22 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
使用Java去实现超市会员管理系统
2022/03/18 Java/Android