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 相关文章推荐
写的htc的数据表格
Jan 20 Javascript
简单三步,搞掂内存泄漏
Mar 10 Javascript
基于jQuery的左右滚动实现代码
Dec 03 Javascript
js、css、img等浏览器缓存问题的2种解决方案
Oct 23 Javascript
js使用for循环及if语句判断多个一样的name
Sep 09 Javascript
coffeescript使用的方式汇总
Aug 05 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
JavaScript面向对象精要(上部)
Sep 12 Javascript
Angular2实现组件交互的方法分析
Dec 19 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
Jan 26 Javascript
JavaScript与JQuery框架基础入门教程
Jul 15 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
德劲1103二次变频版的打磨
2021/03/02 无线电
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
php和asp语法上的区别总结
2019/05/12 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
wxPython 入门教程
2008/10/07 Python
17个Python小技巧分享
2015/01/23 Python
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
深入浅析python的第三方库pandas
2020/02/13 Python
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
C#面试问题
2016/07/29 面试题
精彩自我鉴定
2014/01/16 职场文书
大学校庆策划书
2014/01/31 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
教师求职简历自我评价
2015/03/10 职场文书
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript
Vue router配置与使用分析讲解
2022/12/24 Vue.js