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 相关文章推荐
图片按比例缩放函数
Jun 26 Javascript
jQuery 1.5最新版本的改进细节分析
Jan 19 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
Apr 17 Javascript
控制input输入框中提示信息的显示和隐藏的方法
Feb 12 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
JQuery日期插件datepicker的使用方法
Mar 03 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
Mar 23 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
JS实现的找零张数最小问题示例
Nov 28 Javascript
layui对工具条进行选择性的显示方法
Sep 19 Javascript
vue Cli 环境删除与重装教程 - 版本文档
Sep 11 Javascript
vue监听键盘事件的相关总结
Jan 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
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
个人现实表现材料
2014/02/04 职场文书
优秀护士获奖感言
2014/02/20 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
快餐公司创业计划书
2014/04/29 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
恰同学少年观后感
2015/06/08 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书