のリストを動的に作成し、buttonsそれらをに追加していspanます。各ボタンは、ajax 経由でダウンロードされた JSON データに関連付けられています。データは明らかに機能していますが、jQuery clickイベントが正しいインデックス データを取得していません。つまり、そのセルに関連付けられるべきデータはそうではなく、クリックしたセルは実際にはリストの最後の要素のデータに対応するだけです。より明確にするために、ここに私が持っているものがあります(またはここで利用可能なフィドル):
JSON データ
var data = [{"id":0, "name":"Phil"}, {"id":1, "name":"Ed"}, {"id":2, "name":"Fred"}];HTML
<span id="output"></span><br>CSS
.listButton { color: #E3A869; font: 12pt sans-serif; display: block; width: 100%; background: white; border: 1px solid #FF7F00; text-align: left; cursor: pointer; }コード
for (var i = 0; i < data.length; i++) { var person = data[i]; var button = document.createElement('button'); button.type = 'button'; $(button).addClass('listButton'); var text = "<b>ID:</b> " + person.id + "<br>"; text = text + "<b>Name:</b> " + person.name; $(button).html(text); $(button).click(function() { alert("selected person: " + person.id);//always 2, no matter who is clicked. }); document.getElementById("output").appendChild(button); }結果

(任意のセルをクリックすると、「選択された人物: 2」というアラートが表示されます)
私の最初の考えは、これはスコープの問題であるということです。つまり、毎回新しいボタンを作成すると、他の各セルのボタンが更新されます。修正のための私の最初の試みは、jQuery データをメインの for loop: に設定し$(button).data("id", person.id);、それを click 関数内に戻すこと$(button).data("id")でした。言うまでもなく、それはうまくいきませんでした。
私は何を間違っていますか、どうすれば修正できますか?