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 相关文章推荐
javascript 出生日期和身份证判断大全
Nov 13 Javascript
javascript void(0)的妙用
Oct 21 Javascript
js 中{},[]中括号,大括号使用详解
May 12 Javascript
JS获取URL中的参数数据
Dec 05 Javascript
使用jquery实现IE下按backspace相当于返回操作
Mar 18 Javascript
JavaScript利用正则表达式去除日期中的-
Jun 09 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
Jul 28 Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 Javascript
浅谈react 同构之样式直出
Nov 07 Javascript
移动端如何用下拉刷新的方式实现上拉加载
Dec 10 Javascript
jquery实现进度条状态展示
Mar 26 jQuery
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
Apr 13 Javascript
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
php cout<<的一点看法
2010/01/24 PHP
PHP面向对象法则
2012/02/23 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
js日期联动示例
2014/05/02 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
python基于右递归解决八皇后问题的方法
2015/05/25 Python
python框架django基础指南
2016/09/08 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
函授毕业生自我鉴定范文
2014/03/25 职场文书
遗产继承公证书
2014/04/09 职场文书
给校长的建议书300字
2014/05/16 职场文书
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript