详解jQuery向动态生成的内容添加事件响应jQuery live()方法


Posted in Javascript onNovember 02, 2015

jQuery live()方法是给所有匹配的元素附加一个事件处理函数,即使这个元素是以后通过append,prepend,after等事件生成后的内容也依然有效。
这个方法可以看做是 .bind() 方法的一个变体。使用 .bind() 时,选择器匹配的元素会附加一个事件处理函数,而以后再添加的元素则不会有。为此需要再使用一次 .bind() 才行。比如说:

<body> 
<div class="clickme">Click here</div> 
</body>

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

$('.clickme').bind('click', function() { alert(3water.com); });

 当点击了元素,就会弹出一个警告框。然后,想象一下这之后有另一个元素添加进来了。
$('body').append('<div class="clickme">Another target</div>');

尽管这个新的元素也能够匹配选择器 ".clickme" ,但是由于这个元素是在调用 .bind() 之后添加的,所以点击这个元素不会有任何效果。
但live() 就提供了对应这种情况的方法。如果我们是这样绑定click事件的:
$('.clickme').live('click', function() { alert("3water.com"); });

这样点击新增的元素,它依然能够触发事件处理函数。
事件委托
live() 方法能对一个还没有添加进DOM的元素有效,是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。传递给 live() 的事件处理函数不会绑定在元素上,而是把他作为一个特殊的事件处理函数,绑定在 DOM 树的根节点上。
在我们的例子中,当点击新的元素后,会依次发生下列步骤:
1、生成一个click事件传递给 <div> 来处理。
2、由于没有事件处理函数直接绑定在 <div> 上,所以事件冒泡到DOM树上。
3、事件不断冒泡一直到DOM树的根节点,默认情况下上面绑定了这个特殊的事件处理函数。
4、执行由 .live() 绑定的特殊的 click 事件处理函数。
5、这个事件处理函数首先检测事件对象的 target 来确定是不是需要继续。
6、这个测试是通过检测 $(event.target).closest('.clickme') 能否找到匹配的元素来实现的。
7、如果找到了匹配的元素,那么调用原始的事件处理函数。
8、由于只有在事件发生时才会在上面的第五步里做测试,因此在任何时候添加的元素都能够响应这个事件。
以上就是对jQuery向动态生成的内容添加事件响应jQuery live()方法的详细介绍,希望对大家的学习有所帮助。
Javascript 相关文章推荐
javascript 框架小结 个人工作经验
Jun 13 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
Oct 11 Javascript
20个实用的JavaScript技巧分享
Nov 28 Javascript
jquery实现用户信息修改验证输入方法汇总
Jul 18 Javascript
原生js实现图片层叠轮播切换效果
Feb 02 Javascript
vue.js中mint-ui框架的使用方法
May 12 Javascript
vue项目中使用axios上传图片等文件操作
Nov 02 Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 Javascript
require.js 加载过程与使用方法介绍
Oct 30 Javascript
js编写简易的计算器
Jul 29 Javascript
基于JavaScript实现轮播图效果
Jan 02 Javascript
浅谈Web Storage API的使用
Jun 23 Javascript
jquery实现网页的页面平滑滚动效果代码
Nov 02 #Javascript
JS实现超简单的鼠标拖动效果
Nov 02 #Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
Nov 02 #Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 #Javascript
12个超实用的JQuery代码片段
Nov 02 #Javascript
JavaScript Length 属性的总结
Nov 02 #Javascript
基于Jquery实现万圣节快乐特效
Nov 01 #Javascript
You might like
php学习之数据类型之间的转换代码
2011/05/29 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
js调用flash的效果代码
2008/04/26 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
js中的this关键字详解
2013/09/25 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
浅析python内置模块collections
2019/11/15 Python
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
Unix如何添加新的用户
2014/08/20 面试题
职业技术学校毕业生推荐信
2013/12/03 职场文书
员工培训邀请函
2014/02/02 职场文书
拉拉队口号
2014/06/16 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
风之谷观后感
2015/06/11 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书