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 相关文章推荐
EXT中xtype的含义分析
Jan 07 Javascript
JQueryEasyUI datagrid框架的基本使用
Apr 08 Javascript
热点新闻滚动特效的js代码
Aug 17 Javascript
JavaScript学习笔记之定时器
Jan 22 Javascript
jQuery动态效果显示人物结构关系图的方法
May 07 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 Javascript
javascript实现五星评价代码(源码下载)
Aug 11 Javascript
微信小程序 参数传递实例代码
Mar 20 Javascript
jquery获取transform里的值实现方法
Dec 12 jQuery
react build 后打包发布总结
Aug 24 Javascript
在Create React App中启用Sass和Less的方法示例
Jan 16 Javascript
vue过滤器实现日期格式化的案例分析
Jul 02 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 向访客和爬虫显示不同的内容
2009/11/09 PHP
php简单提示框alert封装函数
2010/08/08 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
python 布尔操作实现代码
2013/03/23 Python
python基础教程之元组操作使用详解
2014/03/25 Python
Python实现控制台进度条功能
2016/01/04 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
日本小田急百货官网:Odakyu
2018/07/19 全球购物
读书心得体会
2013/12/28 职场文书
婚庆公司的创业计划书
2014/01/22 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
Log4j.properties配置及其使用
2021/08/02 Java/Android