jQuery新的事件绑定机制on()示例应用


Posted in Javascript onJuly 18, 2014

今天浏览jQuery的deprecated列表,发现live()和die()在里面了,赶紧看了一下,发现从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一处理事件绑定。因为在此之前有bind(), live(), delegate()等方法来处理事件绑定,jQuery从性能优化以及方式统一方面考虑决定推出新的函数来统一事件绑定方法并且替换掉以前的方法。

on(events,[selector],[data],fn)

events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydown.myPlugin" 。

selector:一个选择器字符串用于过滤器的触发事件的选择器元素的后代。如果选择器为null或省略,当它到达选定的元素,事件总是触发。

data:当一个事件被触发时要传递event.data给事件处理函数。

fn:该事件被触发时执行的函数。 false 值也可以做一个函数的简写,返回false。

替换bind()

当第二个参数'selector'为null时,on()和bind()其实在用法上基本上没有任何区别了,所以我们可以认为on()只是比bind()多了一个可选的'selector'参数,所以on()可以非常方便的换掉bind()

替换live()

在1.4之前相信大家非常喜欢使用live(),因为它可以把事件绑定到当前以及以后添加的元素上面,当然在1.4之后delegate()也可以做类似的事情了。live()的原理很简单,它是通过document进行事件委派的,因此我们也可以使用on()通过将事件绑定到document来达到live()一样的效果。

live()写法

$('#list li').live('click', '#list li', function() { 
//function code here. 
});

on()写法

$(document).on('click', '#list li', function() { 
//function code here. 
});

这里的关键就是第二个参数'selector'在起作用了。它是一个过滤器的作用,只有被选中元素的后代元素才会触发事件。

替换delegate()
delegate()是1.4引入的,目的是通过祖先元素来代理委派后代元素的事件绑定问题,某种程度上和live()优点相似。只不过live()是通过document元素委派,而delegate则可以是任意的祖先节点。使用on()实现代理的写法和delegate()基本一致。

delegate()的写法

$('#list').delegate('li', 'click', function() { 
//function code here. 
});

on()写法

$('#list').on('click', 'li', function() { 
//function code here. 
});

貌似第一个和第二个参数的顺序颠倒了一下,别的基本一样。

总结

jQuery推出on()的目的有2个,一是为了统一接口,二是为了提高性能,所以从现在开始用on()替换bind(), live(), delegate吧。尤其是不要再用live()了,因为它已经处于不推荐使用列表了,随时会被干掉。如果只绑定一次事件,那接着用one()吧,这个没有变化。

Javascript 相关文章推荐
js获取height和width的方法说明
Jan 06 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
Feb 02 Javascript
JS产生随机数的几个用法详解
Jun 22 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
Sep 24 Javascript
jquery二级目录选中当前页的css样式
Dec 08 Javascript
基于jQuery实现定位导航位置效果
Nov 15 jQuery
vue-cli构建项目下使用微信分享功能
May 28 Javascript
详解react native页面间传递数据的几种方式
Nov 07 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
Oct 26 jQuery
js实现复制粘贴的两种方法
Dec 04 Javascript
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
jQuery中attr()和prop()在修改checked属性时的区别
Jul 18 #Javascript
$.each遍历对象、数组的属性值并进行处理
Jul 18 #Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
Jul 17 #Javascript
一个小例子解释如何来阻止Jquery事件冒泡
Jul 17 #Javascript
iframe调用父页面函数示例详解
Jul 17 #Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 #Javascript
js中函数调用的两种常用方法使用介绍
Jul 17 #Javascript
You might like
关于手调机和数调机的选择
2021/03/02 无线电
PHP file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
thinkphp3.2实现上传图片的控制器方法
2016/04/28 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
Javascript注入技巧
2007/06/22 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
Python列表解析配合if else的方法
2018/06/23 Python
python安装requests库的实例代码
2019/06/25 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
怎么快速自学python
2020/06/22 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
大学生职业生涯规划范文
2014/01/22 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
《四季》教学反思
2014/04/08 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
医生见习报告范文
2014/11/03 职场文书
党支部书记岗位职责
2015/02/15 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
详细分析PHP7与PHP5区别
2021/06/26 PHP