jquery新的绑定事件机制on方法的使用方法


Posted in Javascript onApril 15, 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中的值类型和引用类型小结 文字说明与实例
Dec 12 Javascript
jQuery之end()和pushStack()使用介绍
Feb 07 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
Apr 07 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
基于JavaScript实现生成名片、链接等二维码
Sep 20 Javascript
Bootstrap Modal遮罩弹出层代码分享
Nov 21 Javascript
详解Node.js:events事件模块
Nov 24 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 Javascript
微信小程序 传值取值的几种方法总结
Jan 16 Javascript
JS中静态页面实现微信分享功能
Feb 06 Javascript
vue2.0之多页面的开发的示例
Jan 30 Javascript
微信小程序 根据不同用户切换不同TabBar
Apr 21 Javascript
jquery datepicker参数介绍和示例
Apr 15 #Javascript
javascript调试之DOM断点调试法使用技巧分享
Apr 15 #Javascript
javascript页面渲染速度测试脚本分享
Apr 15 #Javascript
JS实现静止元素自动移动示例
Apr 14 #Javascript
js 获取元素下面所有li的两种方法
Apr 14 #Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
Apr 14 #Javascript
jquery使用jxl插件导出excel示例
Apr 14 #Javascript
You might like
PHP基础学习小结
2011/04/17 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
表单提交验证类
2006/07/14 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
import的本质解析
2017/10/30 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
python mysql断开重连的实现方法
2019/07/26 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
教学实验楼管理制度
2014/02/01 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
小学教师师德感言
2014/02/10 职场文书
结婚喜宴主持词
2014/03/14 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
小型婚礼主持词
2015/06/30 职场文书
Nginx快速入门教程
2021/03/31 Servers
MySQL 开窗函数
2022/02/15 MySQL
HttpClient实现表单提交上传文件
2022/08/14 Java/Android