我正在动态创建一个列表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”)
我的第一个想法是这是一个范围问题——这意味着当我每次创建一个新按钮时,它都会更新其他每个单元格的按钮。我的第一次修复尝试是在主 for 循环中设置 jQuery 数据:$(button).data("id", person.id);
,然后将其返回到 click 函数中:$(button).data("id")
。不用说,那没有用。
我做错了什么,我该如何解决?