jquery 给动态生成的标签绑定事件的几种方法总结


Posted in jQuery onFebruary 24, 2018

经常遇到给动态生成的标签绑定事件不好用,自己简单测试总结了下,结论如下了:

<body>
		<!-- 下面是用纯动态方式生成标签 -->
		<div id="d2">
			生成a标签
		</div>
		<div id="d3">
			<input type="button" value="生成a标签" id="btn" />
		</div>
	</body>
	<script>
		
		$(function(){
			$('#btn').bind('click', function(event) {
			 /* 在添加标签的同时给添加的标签绑定点击事件 */
			 $("<li>Hello</li>").appendTo("#d2");
 			});
 			
 			///bind方法对于动态添加的标签不好使,只对已经存在的静态标签好用
 			$('li').bind('click', function(event) {
			 alert("haha"); ///根本不会触发这个方法
 			});
		})
	</script>

点击按钮,就会在d2中添加一个li标签,这个可以。

但是,如果这样在初始化时,用bind方法给将来要动态生成的li标签绑定方法是无效的,点击生成的li标签,没有任何反应。

因为bind方法只能给在执行它时已经存在的静态标签jq对象绑定事件,对未来动态添加的标签是无效的。

这时,可以有几种方法来解决这个问题:

方法一:

<body>
		<!-- 下面是用纯动态方式生成标签 -->
		<div id="d2">
			动态生成a标签
		</div>
		
		<div id="d3">
			<input type="button" value="生成a标签" id="btn"/>
			
		</div>
	</body>
	<script>
		$(function() {
			///点击按钮,给d2动态添加标签
			$('#btn').bind('click', function() {
				/* 在添加标签的同时给添加的标签绑定点击事件 */
				$("<li onclick='show()'>Hello</li>").appendTo("#d2");
			});
	
		})
	
		function show() {
			alert($(this).text());///这样打印出的是空的,没有任何东西,但是方法是会触发的(不能这样打印自己)
			alert("哈哈");
		}
	</script>

这种方法是在动态拼接时就拼接好js原生的要触发的事件,然后把事件方法定义在script标签中。这种方法可以触发li的点击事件。但是如果要用alert($(this).text())这种打印标签自己本身信息的东西的方法,是没有任何结果显示的。这个即使是静态的标签打印自己也是不会有显示的。

要解决这个问题,可以用下面两种方法。

方法二:

<body>
		<!-- 下面是用纯动态方式生成标签 -->
		<div id="d2">
			生成a标签
		</div>
		
		<div id="d3">
			<input type="button" value="生成a标签" id="btn"/>
		</div>
	</body>
	<script>
		$(function(){
			$('#btn').bind('click', function(event) {
			 /* 在添加标签的同时给添加的标签绑定点击事件 */
			 $("<li>Hello</li>").appendTo("#d2").bind('click', function() {
			  /* 显示标签的内容 */
			  alert($(this).text()); ///这种方式也可以正常打印出 hello
			 });
 			});
 			
		})
	</script>

这种方式是可以解决上面问题的。虽然它用的也是bind方法,但是注意,它是先有目的标签对象然后才调用的bind方法,所以也是好用的。而且它居然可以正常打印自己的信息,非常厉害。

方法三:

<body>
		<!-- 下面是用纯动态方式生成标签 -->
		<div id="d1">
			测试静态标签的绑定方法
		</div>
		<br />
		
		<div id="d2">
			动态生成a标签的位置
		</div>
		<div id="d3">
			<input type="button" value="生成a标签" id="btn" />
		</div>
	</body>
	<script>
		$(function(){
			$('#btn').bind('click', function() {
			 /* 在添加标签的同时给添加的标签绑定点击事件 */
			 $("<li>Hello</li>").appendTo("#d2");
 			});
 			
 			///bind方法对于动态添加的标签不好使,只对已经存在的静态标签好用
 			///用live方法才好用
 			$('li').live('click', function() {
			 alert($(this).text());///注意,用live还可以这样写,结果是正常的
			 alert("haha");
 			});
 			
 			///通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)
 			$('#d1').live('click', function() {///对于静态和动态创建的标签都好使
			 alert($(this).text());///注意,用live还可以这样写,结果是正常的.这是非常重要的
			 alert("haha");
 			});
		})
	</script>

这种就是用jq的非常好用的既可以动态也可以静态绑定现在或者未来各种标签的live方法。而且它最神奇的地方是也能 打印自己。我靠,太牛了。以后就用它了。

暂时还没发现这个live方法有什么弱点啊!

新手一枚,欢迎大神指正各种错误!

以上这篇jquery 给动态生成的标签绑定事件的几种方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 jQuery
基于jQuery的左滑出现删除按钮的示例
Aug 29 jQuery
解决jquery appaend元素中id绑定事件失效的问题
Sep 12 jQuery
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
基于jquery实现左右上下移动效果
May 02 jQuery
jQuery实现的导航条点击后高亮显示功能示例
Mar 04 jQuery
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
May 12 jQuery
jQuery实现轮播图效果demo
Jan 11 jQuery
jQuery HTML css()方法与css类实例详解
May 20 jQuery
jQuery实现鼠标拖拽登录框移动效果
Sep 13 jQuery
jQuery插件实现图片轮播效果
Oct 19 jQuery
jQuery实现电梯导航模块
Dec 22 jQuery
jquery动态添加带有样式的HTML标签元素方法
Feb 24 #jQuery
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 #jQuery
vue.js2.0点击获取自己的属性和jquery方法
Feb 23 #jQuery
实现jquery放大镜的两种方法
Feb 22 #jQuery
jQuery实现滚动到底部时自动加载更多的方法示例
Feb 18 #jQuery
jQuery实现鼠标响应式透明度渐变动画效果示例
Feb 13 #jQuery
jQuery实现鼠标响应式淘宝动画效果示例
Feb 13 #jQuery
You might like
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
js脚本实现数据去重
2014/11/27 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
Python入门学习之字符串与比较运算符
2015/10/12 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python版本五子棋的实现代码
2018/12/11 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
python梯度下降算法的实现
2020/02/24 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
教学评估实施方案
2014/03/16 职场文书
英文升职感谢信
2015/01/23 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
主持人大赛开场白
2015/05/29 职场文书
幸福终点站观后感
2015/06/04 职场文书
公司规章制度范本
2015/08/03 职场文书
素质教育培训心得体会
2016/01/19 职场文书
python如何读取.mtx文件
2021/04/22 Python
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python