2

次のコードは、 の下に 10 個の要素を作成します<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)
}

デモ:プランカー

于 2013-08-26T06:06:33.107 に答える