创建单击事件以编程方式创建div

时间:2014-06-28 09:47:55

标签: javascript for-loop onclick

我正在尝试创建实时出现的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"});
}

3 个答案:

答案 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', ''))