详解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 相关文章推荐
jQuery 表格工具集
Apr 25 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
Apr 21 Javascript
jquery图片倾斜层叠切换特效代码分享
Aug 27 Javascript
理解jquery事件冒泡
Jan 03 Javascript
JavaScript判断数组是否存在key的简单实例
Aug 03 Javascript
用js实现简单算法的实例代码
Sep 24 Javascript
bootstrap fileinput完整实例分享
Nov 08 Javascript
jQuery插件扩展操作入门示例
Jan 16 Javascript
Vue 实现树形视图数据功能
May 07 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
Aug 20 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
Oct 10 jQuery
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中目录,文件操作详谈
2007/03/19 PHP
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
python面试题之列表声明实例分析
2019/07/08 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
武汉东之林科技有限公司机试
2013/09/17 面试题
上海期货面试题
2014/01/31 面试题
编程输出如下图形
2013/11/24 面试题
网站开发实习生的自我评价
2013/12/11 职场文书
副总经理任命书
2014/06/05 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
工资证明范本
2015/06/12 职场文书
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android