jquery动态添加元素后,元素的事件无效(已解决)

jquery动态添加元素后,元素的事件无效(已解决)

基于jquery1.9以上版本作的解决方案

先贴一段正常逻辑写的代码

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script src="jquery-3.3.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
 
    //b2的单击事件,这里面动态添加了一个a元素内容为百度,id为a1
    $("#b2").on('click',function(e) {
		var a = $("<a></a>");
		a.attr("id","a1");
		a.html("百度");
		$("#xinjia").html("");
        $("#xinjia").append(a);
    });
    //id为a1的元素单击事件
    $("#a1").on('click',function(){
			console.log(123);
	});
})
</script>
</head>
 
<body>
<a id="ceshi">ceshi</a>
<button id="b2">动态添加</button>

<div id="xinjia">
</div>
</body>
</html>
前端页面操作流程:

1.先点击“动态添加”按钮,把a标签动态生成出来。

2.再点击a标签(百度),查看控制台。

结果:控制台啥也没有输出

因为这样写是有问题的。所有需要修改一下。我先把我修改后的代码贴出来。后面解释

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script src="jquery-3.3.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
 
    $("#b2").on('click',function(e) {
		var a = $("<a></a>");
		a.attr("id","a1");
		a.html("百度");
		$("#xinjia").html("");
        $("#xinjia").append(a);
    });
    
    $("#xinjia").on('click','a',function(){
			console.log(123);
	});
})
</script>
</head>
 
<body>
<a id="ceshi">ceshi</a>
<button id="b2">动态添加</button>

<div id="xinjia">
</div>
</body>
</html>
前端页面操作流程:

1.先点击“动态添加”按钮,把a标签动态生成出来。

2.再点击a标签(百度),查看控制台。

**结果:控制台开始输出了 **

开始作解释了。其实大家可以看出来,这里只有一个区别。我把这两个贴出来

==========控制台不输出===========
//id为a1的元素单击事件
$("#a1").on('click',function(){
console.log(123);
});
==========控制台输出============
$("#xinjia").on('click','#a1',function(){
console.log(123);
});

第一个里,我们是直接对id=a1的元素作单击事件。但是这种jquery获取不到动态添加元素id。因为在jquery1.9以上里。添加了一个解决方案。

方案解释:

既然不能直接获取动态添加的元素,但是咱们可以先获取其所在的父元素。然后再获取动态元素。

就是相当于说,给父元素添加一个事件(该事件类型和动态元素想要实现的事件类型一样)

所以这里可以得到:

$("#xinjia").on('click',回调);

这个时候,还可以继续指定,这个事件的生效范围。那么我们就改造了。

比如,我只想让该父元素中的id为a1的子元素发生指定事件的时候再触发“回调函数”(这里指定id为xinjia的父元素中id为a1的子元素“点击”时候才调用“回调函数”),如下图

<div id="xinjia">
	<a id="a1"></a> <!--动态生成元素-->
</div>

因此,把这个指定加入后,得到:

$("#xinjia").on('click',"#a1",回调);

在jquery中。第二个参数就是选择器,id选择器,类选择器,元素选择器等等。

只要记住,在动态生成的元素中,不能直接指定其事件。只能其父标签的事件后,过滤指定特定元素事件。

还有一种写法:直接指定dom的元素事件。这也是可以的。

$(document).on('click',"#a1",function(){
	console.log("123");
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值