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 相关文章推荐
HTML5+jQuery实现搜索智能匹配功能
Mar 24 jQuery
jquery submit()不能提交表单的解决方法
Apr 24 jQuery
jQuery模拟实现天猫购物车动画效果实例代码
May 25 jQuery
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
jQuery读取本地的json文件(实例讲解)
Oct 31 jQuery
jQuery实现的鼠标响应缓冲动画效果示例
Feb 13 jQuery
jQuery实现输入框的放大和缩小功能示例
Jul 21 jQuery
layui中使用jquery控制radio选中事件的示例代码
Aug 15 jQuery
JQuery事件委托原理与用法实例分析
May 13 jQuery
jquery 时间戳转日期过程详解
Oct 12 jQuery
jquery实现手风琴案例
May 04 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 广告调用类代码(支持Flash调用)
2011/08/11 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
pandas计数 value_counts()的使用
2019/06/24 Python
python基于opencv检测程序运行效率
2019/12/28 Python
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
餐饮主管岗位职责
2013/12/10 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
班级文化建设标语
2014/06/23 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
成绩报告单家长评语
2014/12/30 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS