关于jQuery新的事件绑定机制on()的使用技巧


Posted in Javascript onApril 26, 2013

今天浏览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 相关文章推荐
javascript replace()正则替换实现代码
Feb 26 Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 Javascript
javascript模拟实现ajax加载框实例
Oct 15 Javascript
javascript制作网页图片上实现下雨效果
Feb 26 Javascript
jQuery采用连缀写法实现的折叠菜单效果
Sep 18 Javascript
angularjs自定义ng-model标签的属性
Jan 21 Javascript
详解Javascript中的原型OOP
Oct 12 Javascript
关于vue.js v-bind 的一些理解和思考
Jun 06 Javascript
React利用插件和不用插件实现双向绑定的方法详解
Jul 03 Javascript
分析JavaScript数组操作难点
Dec 18 Javascript
详解vue-meta如何让你更优雅的管理头部标签
Jan 18 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
Apr 25 #Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
Apr 25 #Javascript
JQuery为textarea添加maxlength属性并且兼容IE
Apr 25 #Javascript
同时使用n个window onload加载实例介绍
Apr 25 #Javascript
上传的js验证(图片/文件的扩展名)
Apr 25 #Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
Apr 25 #Javascript
JQUERY对单选框(radio)操作的小例子
Apr 25 #Javascript
You might like
PHP安全配置
2006/12/06 PHP
php中{}大括号是什么意思
2013/12/01 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
强制设为首页代码
2006/06/19 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
vuex提交state&&实时监听state数据的改变方法
2018/09/16 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
寻找网站后台地址的python脚本
2014/09/01 Python
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
python实现bucket排序算法实例分析
2015/05/04 Python
详解python eval函数的妙用
2017/11/16 Python
关于反爬虫的一些简单总结
2017/12/13 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书