jQuery中是事件绑定方式--on、bind、live、delegate
概述:jQuery是我们最常用的js库,对于事件的绑定也是有很多种,on、one、live、bind、delegate等等,接下来我们逐一来进行讲解。
本片文章中事件所带的为版本号,例:v1.7+为1.7版本以上才有,v3.0-为3.0版本后不推荐使用,特此声明。
本文参考了w3school 事件 的部分内容
一、one(V1.7+)
one() 方法为被选元素附加一个或多个事件处理程序,并规定当事件发生时运行的函数,每个元素只能运行一次事件处理器函数。
其语法如下
$(selector).one(event,data,function)
| 参数 | 描述 |
|---|---|
| event | 必需。规定添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。 |
| data | 可选。规定传递到函数的额外数据。 |
| function | 必需。规定当事件发生时运行的函数。 |
例子:
$("p").one("click", function(){
alert( $(this).text() );
});
//例子表明了p标签第一次被点击时弹出其文本。
二、live(v1.7-)与die(v1.7-)
live方法附加一个事件处理器到匹配目前选择器的所有元素,现在和未来。
其语法如下
$(selector).live(event,data,function)
| 参数 | 描述 |
|---|---|
| event | 必需。规定附加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。 |
| data | 可选。规定传递到该函数的额外数据。 |
| function | 必需。规定当事件发生时运行的函数。 |
例子:
$("a").live("click", function() {
return false;
})
此方法在1.7版本已不推荐使用,推荐使用on,在1.7版本以下推荐使用delegate方法。
live方法有如下缺点:
①.在调用 .live() 方法之前,jQuery 会先获取与指定的选择器匹配的元素,这一点对于大型文档来说是很花费时间的。
②.不支持链式写法。例如,$("a").find(".offsite, .external").live( ... ); 这样的写法是不合法的,并不能像期待的那样起作用。
③.由于所有的 .live() 事件被添加到 document 元素上,所以在事件被处理之前,可能会通过最长最慢的那条路径之后才能被触发。
die方法是从元素中删除先前用.live()绑定的所有事件。此方法与live正好完全相反。
语法:
$(selector).die(event,function)
| 参数 | 描述 |
|---|---|
| event | 必需。规定要移除的一个或多个事件处理程序。由空格分隔多个事件值。必须是有效的事件。 |
| function | 可选。规定要移除的特定函数。 |
例子:
$("p").die("click", , function() {
return false;
});
此方法在1.7版本以上不推荐使用,可用off来代替。
三、bind(v3.0-)与unbind(v3.0-)
bind方法为每个匹配元素的特定事件绑定事件处理函数。
语法
$(selector).bind(event,data,function)
| 参数 | 描述 |
|---|---|
| event | 必需。规定添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。 |
| data | 可选。规定传递到函数的额外数据。 |
| function | 必需。规定当事件发生时运行的函数 |
例子
$('#foo').bind('mouseenter mouseleave', function() {
$(this).toggleClass('entered');
});
//由空格分隔多个事件
在3.0版本以上不推荐使用,可用on方法替代。
unbind是bind()的反向操作,从每一个匹配的元素中删除绑定的事件。
语法
$(selector).unbind(event,function)
| 参数 | 描述 |
|---|---|
| event | 可选。规定删除元素的一个或多个事件由空格分隔多个事件值。如果只规定了该参数,则会删除绑定到指定事件的所有函数。 |
| function | 可选。规定从元素的指定事件取消绑定的函数名。 |
例子:
$( "#foo" ).bind( "click", function() {
alert( "" );
});
在3.0版本以上不推荐使用,可用off方法替代
四、delegate(v3.0-)与undelegate(v3.0-)
delegate方法指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。适用于当前或未来的元素。
语法
$(selector).delegate(childSelector,event,data,function)
| 参数 | 描述 |
|---|---|
| childSelector | 必需。规定要附加事件处理程序的一个或多个子元素。 |
| event | 必需。规定附加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。 |
| data | 可选。规定传递到函数的额外数据。 |
| function | 必需。规定当事件发生时运行的函数。 |
例子
$("table").delegate("td", "hover", function(){
$(this).toggleClass("hover");
});
在3.0版本以上不推荐使用,请使用on方法代替
undelegate() 方法删除由 delegate() 方法添加的一个或多个事件处理程序。
语法
$(selector).undelegate(selector,event,function)
| 参数 | 描述 |
|---|---|
| selector | 可选。规定需要删除事件处理程序的选择器。 |
| event | 可选。规定需要删除处理函数的一个或多个事件类型。 |
| function | 可选。规定要删除的具体事件处理函数。 |
在3.0版本以上不推荐使用,请使用off方法代替
五、on(v1.7+)与off(v1.7+)
on() 方法在被选元素及子元素上添加一个或多个事件处理程序。适用于当前及未来的元素
语法
$(selector).on(event,childSelector,data,function)
| 参数 | 描述 |
|---|---|
| event | 必需。规定要从被选元素移除的一个或多个事件或命名空间。由空格分隔多个事件值,也可以是数组。必须是有效的事件。 |
| childSelector | 可选。规定只能添加到指定的子元素上的事件处理程序(且不是选择器本身,比如已废弃的 delegate() 方法)。 |
| data | 可选。规定传递到函数的额外数据。 |
| function | 可选。规定当事件发生时运行的函数。 |
例子
$("p").on("click", function(){
alert( $(this).text() );
});
off() 方法通常用于移除通过 on() 方法添加的事件处理程序。
语法
$(selector).off(event,selector,function(eventObj),map)
| 参数 | 描述 |
|---|---|
| event | 必需。规定要从被选元素移除的一个或多个事件或命名空间。由空格分隔多个事件值。必须是有效的事件。 |
| selector | 可选。规定添加事件处理程序时最初传递给 on() 方法的选择器。 |
| function(eventObj) | 可选。规定当事件发生时运行的函数。 |
| map | 规定事件映射 ({event:function, event:function, ...}),包含要添加到元素的一个或多个事件,以及当事件发生时运行的函数。 |
例子
$("body").off("click", "p", , function(){
});
总结
1.可为未来元素绑定事件的有:live方法、delegate方法、on方法,1.7版本之前推荐使用delegate方法。1.7版本以后推荐使用on方法。
2.推荐尽量使用on方法与off方法。因为其他方法都是基于on方法的。我们看jQuery源码即可知道。(jquery源码v3.3.1)

jQuery中是事件绑定方式--on、bind、live、delegate的更多相关文章
- Jquery中的事件绑定$("#btn").bind("click",function(){ })
Jquery中的事件绑定:$("#btn").bind("click",function(){ }) 由于每次都这么调用太麻烦,所以jquery就用$(&qu ...
- jQuery 中的事件绑定
一.事件概念 和数据库中的触发器一样,当操作了数据的时候会引发对应的触发器程序执行 一样,JS 中的事件就是对用户特定的行为作出相应的响应的过程,其实上就是浏览器 监听到用户的某些行为的时候会执行对应 ...
- jQuery中的事件绑定方法
在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...
- jQuery事件绑定on()、bind()与delegate() 方法详解
jquery中有四种事件绑定函数,bind(),live(),on(),delegate(),由于live现在并不常用,因此不做过多解释. 1. bind()用法 $("div p" ...
- jQuery三种事件绑定方式.bind(),.live(),.delegate()
.bind(), .live(), 和 .delegate()之间的区别并不明显.但是理解它们的不同之处有助于写出更简洁的代码,并防止我们的交互程序中出现没有预料到的bug. 基础 DOM树 首先,图 ...
- jQuery中的事件绑定的几种方式
jQuery目前有on(),bind(),delegate(),live()四种绑定方式,但是随着版本的不断更新,有的方式也相应的被淘汰掉 [band()方式绑定] 3.0版本之前的绑定方式比较常用的 ...
- 关于jquery中的事件绑定bind()和live()
live可以说是bind是方法的变种. 二者的主要区别就是live方法的作用机理是事件委托,live方法的作用机理是将事件绑定DOM的根节点上. live方法的处理机制就是把事件绑定在DOM树的根节点 ...
- jQuery事件绑定—on()、bind()与delegate()
啃了一段日子的js相关了,学的过程中发现在jQuery中绑定事件时,有人用bind(),有人用on(),有人用delegate(),还有人用live(),看代码的时候觉得都实现功能了也就掀过去了,只是 ...
- jQuery 中的事件绑定与取消绑定
1:在jQuery中使用bind方法进行事件的绑定,bind方法有两个参数,第一个参数是事件的类型例如click,change,keyup,keydown,blur,focus等.第二个参数是一个回调 ...
随机推荐
- WPF 显示 mp3 专辑图片
mp3 专辑图片是属于 mp3 的 tag 的一部分,安装 taglib# 的 nuget 安装包到项目.这里使用 TagLib.Portable https://www.nuget.org/pack ...
- Android开发 - Retrofit 2 使用自签名的HTTPS证书进行API请求
为了确保数据传输的安全,现在越来越多的应用使用Https的方式来进行数据传输,使用https有很多有点,比如: HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,要比ht ...
- 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言
最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...
- Swift 里的指针
 基础知识 指针的内存状态 typed? initiated? ❌ ❌ ✅ ❌ ✅ ✅ 之前分配的内存可能被释放,使得指针指向了未被分配的内存. 有两种方式可以使得指针指向的内存处于Uninitia ...
- Linux - 参考链接
01 - Linux系统监控的Shell脚本 常用的主机监控Shell脚本 使用Shell脚本对Linux系统和进程资源进行监控 02 - Linux系统结构 Linux 系统结构详解 03 - Li ...
- LeetCode--No.006 ZigZag Conversion
6. ZigZag Conversion Total Accepted: 98584 Total Submissions: 398018 Difficulty: Easy The string &qu ...
- vuex的module的简单实用方法
当我们的项目越来越大的时候,我们就开始使用vuex来管理我们的项目的状态.但是如果vuex的状态多了呢,这个时候module就登场了.看了一下官方的文档,很详细,但是没有demo让初学者很头疼.那我就 ...
- Ubuntu18.04 安装 VMwareTools
VMwareTools作用: 1.增强虚拟显卡和硬盘性能.以及同步虚拟机与主机时钟的驱动程序. 2.可以从物理主机直接往虚拟机里面拖文件. 3.鼠标进入虚拟机后可以直接出来,无需按CTRL+ALT才可 ...
- Python --代码风格检查 pep8
pip3 install pycodestyle pycodestyle .. Pep8编码规范 https://blog.csdn.net/ratsniper/article/details/789 ...
- 从零开始学 Web 之 DOM(七)事件冒泡
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...