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 相关文章推荐
js实现拖拽 闭包函数详细介绍
Nov 25 Javascript
js特殊字符转义介绍
Nov 05 Javascript
JavaScript暂停和继续定时器的实现方法
Jul 18 Javascript
深入浅出es6模板字符串
Aug 26 Javascript
redux-saga 初识和使用
Mar 10 Javascript
JavaScript循环遍历你会用哪些之小结篇
Sep 28 Javascript
浅谈js闭包理解
Mar 28 Javascript
记录vue项目中遇到的一点小问题
May 14 Javascript
layui type2 通过url给iframe子页面传值的例子
Sep 06 Javascript
微信小程序实现蓝牙打印
Sep 23 Javascript
关于在LayUI中使用AJAX提交巨坑记录
Oct 25 Javascript
JS操作JSON常用方法(10w阅读)
Dec 06 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
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
小学生家长寄语
2014/04/02 职场文书
信访工作汇报材料
2014/10/27 职场文书
调研报告的主要写法
2019/04/18 职场文书