jQuery绑定事件的四种方式介绍


Posted in Javascript onOctober 31, 2016

jQuery提供了多种绑定事件的方式,每种方式各有其特点,明白了它们之间的异同点,有助于我们在写代码的时候进行正确的选择,从而写出优雅而容易维护的代码。下面我们来看下jQuery中绑定事件的方式都有哪些。

jQuery中提供了四种事件监听方式,分别是bind、live、delegate、on,对应的解除监听的函数分别是unbind、die、undelegate、off。在开始看他们之前

一:bind(type,[data],function(eventObject))

bind是使用频率较高的一种,作用就是在选择到的元素上绑定特定事件类型的监听函数,参数的含义如下:

type:事件类型,如click、change、mouseover等;

data:传入监听函数的参数,通过event.data取到。可选;

function:监听函数,可传入event对象,这里的event是jQuery封装的event对象,与原生的event对象有区别,使用时需要注意

bind的源码:

bind: function( types, data, fn ) {
return this.on( types, null, data, fn );
}
$('#myol li').bind('click',getHtml);

bind的特点就是会把监听器绑定到目标元素上,有一个绑一个,在页面上的元素不会动态添加的时候使用它没什么问题。但如果列表中动态增加一个“列表元素5”,点击它是没有反应的,必须再bind一次才行。要想不这么麻烦,我们可以使用live。

jQuery还有一种事件绑定的简写方式如a.click(function(){});、a.change(function(){});等,它们的作用与bind一样,仅仅是简写而已。

二:live(type, [data], fn)

live的参数和bind一样,它又有什么蹊跷呢,我们还是先瞄一眼源码:

live: function( types, data, fn ) {
jQuery( this.context ).on( types, this.selector, data, fn );
return this;
}

可以看到live方法并没有将监听器绑定到自己(this)身上,而是绑定到了this.context上了。这个context是什么东西呢?其实就是元素的限定范围,看了下面的代码就清楚了:

$('#myol li').context; //document
$('#myol li','#myol').context; //document
$('#myol li',$('#myol')[0]); //ol

通常情况下,我们都不会像第三种方式那样使用选择器,所以也就认为这个context通常就是document了,即live方法把监听器绑定到了 document上了。不把监听器直接绑定在元素上,你是不是想起事件委托机制来了呢?若没有,可以点击这里回忆一下。live正是利用了事件委托机制来 完成事件的监听处理,把节点的处理委托给了document。在监听函数中,我们可以用event.currentTarget来获取到当前捕捉到事件的 节点。下面的例子来揭晓:

$('#myol li').live('click',getHtml);

三:live存在那样的缺点,所以我们就思考,既然老爷子负担那么重,可不可以别把监听器绑定在document上呢,绑定在就近的父级元素上不就好了。顺应正常逻辑,delegate诞生了。

参数多了一个selector,用来指定触发事件的目标元素,监听器将被绑定在调用此方法的元素上。看看源码:

delegate: function( selector, types, data, fn ) {
return this.on( types, selector, data, fn );
}

又是调用了on,并且把selector传给了on。看来这个on真的是举足轻重的东西。照样先不管它。看看示例先:

$('#myol').delegate('li','click',getHtml);

看了这么多,你是不是迫不及待想看看这个on的真实面目了呢,这就来:

on(type,[selector],[data],fn)

参数与delegate差不多但还是有细微的差别,首先type与selector换位置了,其次selector变为了可选项。交换位置的原因不好查证,应该是为了让视觉上更舒服一些吧。

我们先不传selector来看一个例子:

$('#myol li').on('click',getHtml);

可以看到event.currentTarget是li自己,与bind的效果一样。至于传selector进去,就是跟delegate一样的意义了,除了参数顺序不同,其他完全一样。

终于看到on的真实作用了,那么,这么多的事件绑定方式,我们该如何进行选择呢?

其实这个问题是完全不必纠结的,因为你已经知道他们之间的区别了不是么?根据实际情况斟酌使用就行。不过官方有一个推荐就是尽量使用on,因为其他 方法都是内部调用on来完成的,直接使用on可以提高效率,而且你完全可以用on来代替其他三种写法。至于如何代替我想就不必这么直白的写出来了,真正理 解它们的区别之后自然而然也就不是难事了。

以上所述是小编给大家介绍的jQuery绑定事件的四种方式介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
通过JAVASCRIPT读取ASP设定的COOKIE
Feb 15 Javascript
javascript实现避免页面按钮重复提交
Jan 08 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
Apr 15 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
May 14 Javascript
javascript实现对表格元素进行排序操作
Nov 18 Javascript
javascript设计模式之策略模式学习笔记
Feb 15 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
Mar 09 Javascript
angularjs实现上拉加载和下拉刷新数据功能
Jun 12 Javascript
你点的 ES6一些小技巧,请查收
Apr 25 Javascript
JS实现电脑虚拟键盘打字测试
Jun 24 Javascript
JS判断数组四种实现方法详解
Jun 29 Javascript
利用JS判断元素是否为数组的方法示例
Jan 08 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
Oct 31 #Javascript
JS中作用域和变量提升(hoisting)的深入理解
Oct 31 #Javascript
jsp 网站引入外部css或者js失效问题解决
Oct 31 #Javascript
js学习笔记之事件处理模型
Oct 31 #Javascript
基于JS实现checkbox全选功能实例代码
Oct 31 #Javascript
新手学习前端之js模仿淘宝主页网站
Oct 31 #Javascript
vue.js学习笔记之绑定style样式和class列表
Oct 31 #Javascript
You might like
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
2013/12/13 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
使用python实现接口的方法
2017/07/07 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
小学语文业务学习材料
2014/06/02 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
党小组考察意见
2015/06/02 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
护士心得体会范文
2016/01/25 职场文书
MySQL插入数据与查询数据
2022/03/25 MySQL
使用Python获取字典键对应值的方法
2022/04/26 Python