2

以下代码在<body id="container" />. 当我单击任何元素时,我总是会看到带有值的警报10

如何让每个警报显示每个元素的索引?

for (var i = 0; i < 10; ++i) {
  var id = "#element_" + i;
  $("#container").append('<p id="element_' + i + '">foo</p>');
  $(id).click(function (e) {
    alert(i);
  });
}
4

3 回答 3

4

您需要关闭或简单地将$.on()与数据一起使用:

for (var i = 0; i < 10; ++i) {
  var id = "#element_" + i;
  $("#container").append('<p id="element_' + i + '">foo</p>');
  $(id).on("click", i, function (e) { alert(e.data); });
}
于 2013-08-26T06:10:44.203 回答
3

不要在for循环中创建函数

for (var i = 0; i < 10; ++i) {
  $("#container").append('<p id="element_' + i + '">foo</p>');
}

$("#container > p").click(function (e) {
    var idNum = this.id.split('_')[1];
    alert(idNum); // 0, 1, 2 ...
});

演示

于 2013-08-26T06:23:54.570 回答
2

需要创建一个私有闭包

for (var i = 0; i < 10; ++i) {
    (function(idx){
        var id = "#element_" + idx;
        $("#container").append('<p id="element_' + idx + '">foo</p>');
        $(id).click(function (e) {
            alert(idx);
        });
    })(i)
}

演示:Plunker

于 2013-08-26T06:06:33.107 回答