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 相关文章推荐
jQuery 表单验证插件formValidation实现个性化错误提示
Jun 23 Javascript
使用js获取地址栏中传递的值
Jul 02 Javascript
jquery给图片添加鼠标经过时的边框效果
Nov 12 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
Dec 18 Javascript
JavaScript实现找质数代码分享
Mar 24 Javascript
详解js中的apply与call的用法
Jul 30 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
Jan 13 Javascript
angularjs 页面自适应高度的方法
Jan 17 Javascript
vue1.0和vue2.0的watch监听事件写法详解
Sep 11 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
Jun 19 Javascript
Vue使用axios引起的后台session不同操作
Aug 14 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和ACCESS写聊天室(九)
2006/10/09 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
JS解密入门之凭直觉解
2008/06/25 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
pyenv命令管理多个Python版本
2017/03/26 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
python 实现线程之间的通信示例
2020/02/14 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
数据管理员的自我评价分享
2013/11/15 职场文书
18岁生日感言
2014/01/12 职场文书
小学语文教研活动总结
2014/07/01 职场文书
青岛市的收音机研制与生产
2022/04/07 无线电
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
解决Oracle数据库用户密码过期
2022/05/11 Oracle