0

我正在动态生成一系列 onclick 事件,其中 alert() 与假装内容的循环号相关联。我的问题是当前警报输出最后一个循环的“i”值,而不是与假装内容关联的第 i 个循环。有什么想法吗?

JavaScript:

for (i = 1; i < 4; i++) {

    prepend_content = '<a href="#" id="img1_link_' + i + '" onclick="alert(i);">foo</a>';
    $('#dynamic_div').prepend(prepend_content);

}

非常感谢。

4

2 回答 2

2

尝试像以前一样连接它:

for (i = 1; i < 4; i++) {
    prepend_content = '<a href="#" id="img1_link_' + i + '" onclick="alert(' + i + ');">foo</a>';
    $('#dynamic_div').prepend(prepend_content);
}

如果您还没有声明,您可能需要声明iand prepend_content(with var),以确保它们不会泄漏到全局范围内。

同时,我不建议使用或添加带有内联事件处理程序的 HTML。尝试像这样创建元素:

prepend_content = $("<a>").attr({
    href: "#",
    id: "img1_link_" + i
}).text("foo").on("click", (function (i) {
    return function () {
        alert(i);
    };
})(i));

演示:http: //jsfiddle.net/ujv4y/

处理程序立即调用函数的额外用途click是创建一个捕获i循环中值的闭包。

于 2013-04-08T05:09:15.443 回答
0

您可以使用 currying 为警报创建一个函数(对于更复杂的东西):

function(i) {
return function(){alert(i);}
}
于 2013-04-08T05:12:06.157 回答