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 相关文章推荐
基于JQuery的抓取博客园首页RSS的代码
Dec 01 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
Dec 28 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
Aug 26 Javascript
js自定义回调函数
Dec 13 Javascript
AngularJS 中的指令实践开发指南(一)
Mar 20 Javascript
mui框架 页面无法滚动的解决方法(推荐)
Jan 25 Javascript
vue实现选项卡及选项卡切换效果
Apr 24 Javascript
探秘vue-rx 2.0(推荐)
Sep 21 Javascript
JS数组方法slice()用法实例分析
Jan 18 Javascript
Bootstrap table 服务器端分页功能实现方法示例
Jun 01 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 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
php4的session功能评述(三)
2006/10/09 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
AngularJS中比较两个数组是否相同
2016/08/24 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
python实现kMeans算法
2017/12/21 Python
Python实现的堆排序算法示例
2018/04/29 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
全球在线商店:BerryLook
2019/04/14 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
总经理职责
2013/12/22 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
财务会计求职信范文
2015/03/20 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
Golang 结构体数据集合
2022/04/22 Golang