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 相关文章推荐
Firefox div高度自适应
Apr 28 Javascript
13个绚丽的Jquery 界面设计网站推荐
Sep 28 Javascript
JS简单循环遍历json数组的方法
Apr 22 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 Javascript
Javascript中级语法快速入手
Jul 30 Javascript
Vue.js实现简单动态数据处理
Feb 13 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
Node.js实现一个HTTP服务器的方法示例
May 13 Javascript
微信小程序 wxParse插件显示视频问题
Sep 27 Javascript
vue中改变滚动条样式的方法
Mar 03 Javascript
vue使用echarts画组织结构图
Feb 06 Vue.js
vue中axios封装使用的完整教程
Mar 03 Vue.js
防止重复发送 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 数据库树的遍历方法
2009/02/06 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
jquery实现文本框数量加减功能的例子分享
2014/05/10 Javascript
使用js实现数据格式化
2014/12/03 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
详解如何使用Python编写vim插件
2017/11/28 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
基于python plotly交互式图表大全
2019/12/07 Python
Python Selenium参数配置方法解析
2020/01/19 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
Python 求向量的余弦值操作
2021/03/04 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
工商学院毕业生个人自我评价
2013/09/19 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
上班上网检讨书
2014/01/29 职场文书
合作经营协议书范本
2014/04/17 职场文书
个人简历自荐信
2014/06/26 职场文书
自主招生学校推荐信
2014/09/26 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
战友聚会致辞
2015/07/28 职场文书
改进工作作风心得体会
2016/01/23 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang