专业编程基础技术教程

网站首页 > 基础教程 正文

jquery循环中绑定事件最后一个元素覆盖前面元素的事件问题

ccvgpt 2024-11-24 12:24:35 基础教程 1 ℃

大家一定遇到过在for循环中创建html元素,并且绑定事件的情况,

实际的效果,发现最后一个元素的事件将会覆盖前面所有元素的事件,如下面的代码:

jquery循环中绑定事件最后一个元素覆盖前面元素的事件问题



	for (int i = 0; i < 10; i++) {
		var  p=$("<p></p>");
		p.html(i);
		var url="http://localhost/p?id="+i;
		p.click(function(){
			window.open(url);
		});
		$("body").append(p);
	}


以上代码,目测看没有什么问题,但是实际情况是,所有的p元素的click事件都是相同了,最后一次的事件覆盖了前面所有的事件,

url都变成了最后一次的,这应该是jquery的一个bug


那应该如何解决呢?


我稍作调整,改成以下的就可以了




	for (int i = 0; i < 10; i++) {
		var  p=$("<p></p>");
		p.html(i);
		var url="http://localhost/p?id="+i;
		p.attr("url",url);
		p.click(function(){
			window.open($(this).attr("url"));//此处不能直接写url
		});
		$("body").append(p);
	}


这样,每个p标签的事件都是独立的了。


网上看了听说可以使用数组的方法解决,希望有更优雅的解决方法,希望大家评论区讨论贡献

Tags:

最近发表
标签列表