我正在尝试创建实时出现的div(使用jQuery和XML)。
单击该div之后,我希望用户将根据他单击的div重定向到URL。
div在for循环中创建,它工作正常。
我的问题是每个div都得到i
的最后一个值,即5。
for(i=0; i<5;i++){
var div= document.createElement("div");
div.id="conv"+i;
div.innerHTML=conv[i].childNodes[0].nodeValue;
document.getElementById("conv").appendChild(div);
$("#conv"+i).click(function(){
alert(this.id);
var form= document.createElement("form");
form.setAttribute("method","post")
form.setAttribute("action","watch_conv.php");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "chat_room");
hiddenField.setAttribute("value",chat_room[i].childNodes[0].nodeValue);
form.appendChild(hiddenField)
document.body.appendChild(form);
//form.submit();
alert(i);
});
$("#conv"+i).animate({opacity:"show"});
}
答案 0 :(得分:2)
请记住,您的回调将在原始循环完成后运行。因此,当您alert()
运行时,i
将为5.如果您想使用在回调中创建div的i
原始值,则需要以其他方式获取它,例如从id中解析它或从自定义属性中检索它。
答案 1 :(得分:1)
这是javascript的标准行为。为了在循环的每次迭代中使i的值保持不变,您需要使用闭包:
$('something').click((function(i) {
return function(e)
{
// now you will have access to variable "i" the way you'd normally expect
alert('clicked on ' + i);
}
})(i));
答案 2 :(得分:0)
问题在于&#39; i&#39;因为你正在使用for循环来改变变量,所以它会增加变量。因此,不是获取i,而是使用
检索数字alert(this.id.replace('conv', ''))