jQuery中.live()方法的用法深入解析


Posted in Javascript onDecember 30, 2013

给jquery动态生成的页面元素添加事件?使用livequery插件,或可以使用jquery的live方法。摘录一段live简单使用方法。

更多详情还见官网 http://api.jquery.com/live/

live(type, [data],fn)

概述

jQuery给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。

这个方法是基本是的 .bind() 方法的一个变体。使用 .bind()时,选择器匹配的元素会附加一个事件处理函数,而以后再添加的元素则不会有。为此需要再使用一次 .bind() 才行。比如说

Click here
 
可以给这个元素绑定一个简单的click事件:

$('.clickme').bind('click', function() {
 alert("Bound handler called.");     
}); 

当点击了元素,就会弹出一个警告框。

然后,想象一下这之后有另一个元素添加进来了。

$('body').append('
Another target
');

尽管这个新的元素也能够匹配选择器".clickme" ,但是由于这个元素是在调用 .bind() 之后添加的,所以点击这个元素不会有任何效果。

.live()就提供了对应这种情况的方法。如果我们是这样绑定click事件的:

$('.clickme').live('click', function() {
 alert("Live handler called.");      
});

然后再添加一个新元素:

$('body').append('
Another target
');

然后再点击新增的元素,他依然能够触发事件处理函数。 

事件委托

.live()方法能对一个还没有添加进DOM的元素有效,是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。

传递给 .live()的事件处理函数不会绑定在元素上,而是把他作为一个特殊的事件处理函数,绑定在 DOM树的根节点上。在我们的例子中,当点击新的元素后,会依次发生下列步骤:

1、生成一个click事件传递给<div> 来处理

2、由于没有事件处理函数直接绑定在 <div>上,所以事件冒泡到DOM树上

3、事件不断冒泡一直到DOM树的根节点,默认情况下上面绑定了这个特殊的事件处理函数。

4、执行由 .live() 绑定的特殊的click 事件处理函数。

5、这个事件处理函数首先检测事件对象的target 来确定是不是需要继续。这个测试是通过检测 $(event.target).closest('.clickme')能否找到匹配的元素来实现的。

6、如果找到了匹配的元素,那么调用原始的事件处理函数。

由于只有在事件发生时才会在上面的第五步里做测试,因此在任何时候添加的元素都能够响应这个事件。

附加说明

.live()虽然很有用,但由于其特殊的实现方式,所以不能简单的在任何情况下替换 .bind()。主要的不同有:

在jQuery 1.4中,.live()方法支持自定义事件,也支持所有的JavaScript 事件。在jQuery 1.4.1中,甚至也支持 focus 和 blue事件了(映射到更合适,并且可以冒泡的focusin和focusout上)。

另外,在jQuery1.4.1中,也能支持hover(映射到"mouseenter mouseleave")。然而在jQuery1.3.x中,只支持支持的JavaScript事件和自定义事件:click, dblclick, keydown, keypress,keyup, mousedown, mousemove, mouseout, mouseover, 和 mouseup.

.live()并不完全支持通过DOM遍历的方法找到的元素。取而代之的是,应当总是在一个选择器后面直接使用 .live()方法,正如前面例子里提到的。

当一个事件处理函数用 .live()绑定后,要停止执行其他的事件处理函数,那么这个函数必须返回 false。 仅仅调用 .stopPropagation()无法实现这个目的。

参考 .bind() 方法可以获得更多关于事件绑定的信息。

在jQuery 1.4.1中,你可以一次绑定多个事件给 .live() ,跟.bind() 提供的功能类似。

在jQuery 1.4中,data参数可以用于把附加信息传递给事件处理函数。一个很好的用处是应付由闭包导致的问题。可以参考 .bind()的讨论来获得更多信息。

参数

typeString     事件类型

data(可选)    Object          欲绑定的事件处理函数

fn                  Function        欲绑定的事件处理函数

示例

HTML 代码:
 
Click me!

jQuery 代码:
    $("p").live("click", function(){
         $(this).after("

Another paragraph!

");
    });

描述:

阻止默认事件行为和事件冒泡,返回false

jQuery 代码:
$("a").live("click", function() { returnfalse; });

描述:

仅仅阻止默认事件行为

jQuery 代码:
$("a").live("click", function(event){
    event.preventDefault();
 });

Javascript 相关文章推荐
用javascript来实现动画导航效果的代码
Dec 16 Javascript
基于jquery的滚动新闻列表
Jun 19 Javascript
Jquery 切换不同图片示例代码
Dec 05 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
Apr 04 Javascript
通过Jquery的Ajax方法读取将table转换为Json
May 31 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
Aug 27 Javascript
js简单实现Select互换数据的方法
Aug 17 Javascript
js实现简单的联动菜单效果
Aug 19 Javascript
JavaScript中cookie工具函数封装的示例代码
Oct 11 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
Oct 19 Javascript
微信小程序中显示html格式内容的方法
Apr 25 Javascript
uni-app 自定义底部导航栏的实现
Dec 11 Javascript
Javasipt:操作radio标签详解
Dec 30 #Javascript
js获取select标签的值且兼容IE与firefox
Dec 30 #Javascript
jquery获得keycode的示例代码
Dec 30 #Javascript
原生javaScript做得动态表格(注释写的很清楚)
Dec 29 #Javascript
JS对象转换为Jquery对象实现代码
Dec 29 #Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 #Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
Dec 29 #Javascript
You might like
php结合正则获取字符串中数字
2015/06/19 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
基于python实现KNN分类算法
2020/04/23 Python
Python用字典构建多级菜单功能
2019/07/11 Python
python中with用法讲解
2020/02/07 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
英文自荐信格式
2013/11/28 职场文书
项目合作协议书
2014/04/16 职场文书
国庆宣传标语
2014/06/30 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
房屋维修申请报告
2015/05/18 职场文书
感恩教育观后感
2015/06/17 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python