【发布时间】:2016-08-25 01:50:19
【问题描述】:
我从 dynamodb 获得一个 json 数组,并在遍历按钮时将 addEventListener() 添加到按钮。但只有最后一个按钮对此做出响应。
这是 SO 上的 asked before 并且是 google 上的第一次点击,所以我更改了循环以使用闭包。但是除了最后一个按钮之外,我仍然无法将 addEventListener() 附加到其他按钮。
我最初尝试过这个:
for (var i = 0; i < array_length; ++i) {
(function(j) {
var obj = data.Items[j];
adiv.innerHTML = adiv.innerHTML + "<div class='row'><div class='center-div six columns'>" + obj.Event + ", " + obj.Location + "</div></div>";
adiv.innerHTML = adiv.innerHTML + "<div class='row'><div class='center-div six columns'>" + obj.Date + ", " + obj.Time + "</div></div>";
adiv.innerHTML = adiv.innerHTML + "<div class='row'><div class='center-div six columns'><button id='yay_button_" + i + "' class='button-primary'>Deltag</button></div></div>";
var elem = document.getElementById('yay_button_' + j);
elem.addEventListener('click', function() {
alert('id: ' + j);
});
})(i);
}
然后是这个较短的版本:
(function(j) {
document.getElementById('yay_button_' + j).addEventListener('click', function() {
alert('id: ' + j);
});
}(i));
我尝试的另一个 variant 是使用 new 创建一个按钮:
function Button(id, number) {
document.getElementById(id + number).addEventListener('click', function() {
alert('click: ' + id + number);
});
}
new Button('yay_button_', i);
我在 el capitan 上尝试了 safari 和 chrome,在控制台中没有出现错误。当我检查按钮时,按钮具有正确的 ID,yay_button_0 和 _1。
【问题讨论】:
标签: javascript arrays json addeventlistener