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实现图片放大点击切换
Jun 06 jQuery
jquery仿京东商品放大浏览页面
Jun 06 jQuery
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
jQuery实现的表格前端排序功能示例
Sep 18 jQuery
jQuery选择器之子元素过滤选择器
Sep 28 jQuery
jQuery结合jQuery.cookie.js插件实现换肤功能示例
Oct 14 jQuery
jQuery实现炫丽的3d旋转星空效果
Jul 04 jQuery
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
jQuery实现数字华容道小游戏(实例代码)
Jan 16 jQuery
html中两种获取标签内的值的方法
Jun 16 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缓存的详解
2013/05/15 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
php备份数据库类分享
2015/04/14 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
浅析python中while循环和for循环
2019/11/19 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
Python 字符串池化的前提
2020/07/03 Python
Python tkinter实现日期选择器
2021/02/22 Python
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
高中毕业自我鉴定
2013/12/13 职场文书
国培教师自我鉴定
2014/02/12 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle