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 相关文章推荐
JavaScript中获取元素索引的函数
Sep 10 Javascript
提高javascript效率 一次判断,而不要次次判断
Mar 30 Javascript
jQuery 属性选择器element[herf*='value']使用示例
Oct 20 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
May 26 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
React实践之Tree组件的使用方法
Sep 30 Javascript
JS实现的计数排序与基数排序算法示例
Dec 04 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
Feb 23 Javascript
npm 下载指定版本的组件方法
May 17 Javascript
使用jQuery实现掷骰子游戏
Oct 24 jQuery
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 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
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
2009/01/30 Javascript
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
Python collections模块使用方法详解
2019/08/28 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
电信专业应届生自荐信
2013/09/28 职场文书
急诊科护士自我鉴定
2013/10/14 职场文书
护理专业的自荐信
2013/10/22 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
土建资料员岗位职责
2014/01/04 职场文书
快餐店的创业计划书范文
2014/01/29 职场文书
现场施工员岗位职责
2014/03/10 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
Golang 遍历二叉树
2022/04/19 Golang
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript