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瀑布流式图片懒加载实例解析与优化
Feb 23 Javascript
RequireJS多页面应用实例分析
Jun 29 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
Sep 14 Javascript
通过button将form表单的数据提交到action层的实例
Sep 08 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
Oct 20 Javascript
仿ElementUI实现一个Form表单的实现代码
Apr 23 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
Apr 23 Javascript
JavaScript实现轮播图效果代码实例
Sep 28 Javascript
vue插槽slot的简单理解与用法实例分析
Mar 14 Javascript
antd日期选择器禁止选择当天之前的时间操作
Oct 29 Javascript
vue动态设置路由权限的主要思路
Jan 13 Vue.js
四十九个javascript小知识实用技巧
Nov 20 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中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php遍历数组的4种方法总结
2014/07/05 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
会展中心部门工作职责
2013/11/27 职场文书
护士自我评价
2014/02/01 职场文书
总账会计岗位职责
2014/03/13 职场文书
校长寄语大全
2014/04/09 职场文书
小学班主任培训方案
2014/06/04 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
2015年导购员工作总结
2015/04/25 职场文书
学习党章心得体会2016
2016/01/15 职场文书
MySQL系列之十二 备份与恢复
2021/07/02 MySQL
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers