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 相关文章推荐
IE和firefox浏览器的event事件兼容性汇总
Dec 06 Javascript
为jQuery.Treeview添加右键菜单的实现代码
Oct 22 Javascript
Grid得到选择行数据的方法总结
Jan 17 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
May 12 Javascript
Javascript添加监听与删除监听用法详解
Dec 19 Javascript
8个超实用的jQuery功能代码分享
Jan 08 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
Jun 01 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
Aug 01 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
Dec 24 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
Apr 10 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
vue 页面回退mounted函数不执行的解决方案
Jul 26 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
提问的智慧(2)
2006/10/09 PHP
十天学会php之第八天
2006/10/09 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
盘点提高 Python 代码效率的方法
2014/07/03 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
Python 实现向word(docx)中输出
2020/02/13 Python
python实现logistic分类算法代码
2020/02/28 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
介绍一下JMS编程步骤
2015/09/22 面试题
毕业生自我鉴定
2013/11/05 职场文书
劳资专员岗位职责
2013/12/27 职场文书
企业党员一句话承诺
2014/05/30 职场文书
企业文化标语大全
2014/06/10 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
自主招生学校推荐信
2014/09/26 职场文书
支行行长竞聘报告
2014/11/06 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技