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实例教程(19) 使用HoTMetal(6)
Dec 23 Javascript
javascript 兼容鼠标滚轮事件
Apr 07 Javascript
疯狂Jquery第一天(Jquery学习笔记)
May 11 Javascript
JS 两个字符串时间的天数差计算
Aug 25 Javascript
js实现表单提交后不重新刷新当前页面
Nov 30 Javascript
jQuery插件autocomplete使用详解
Feb 04 Javascript
Angular获取手机验证码实现移动端登录注册功能
May 17 Javascript
JS实现留言板功能
Jun 17 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
详解 vue better-scroll滚动插件排坑
Feb 08 Javascript
js实现AI五子棋人机大战
May 28 Javascript
详解Node.js使用token进行认证的简单示例
May 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可逆加密/解密函数分享
2012/09/25 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
php查询内存信息操作示例
2019/05/09 PHP
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
大学生工作推荐信范文
2013/12/02 职场文书
关于爱情的广播稿
2014/01/16 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
竞选稿之小学班干部
2019/10/31 职场文书