我通过循环基于JSON对象动态创建了一些按钮。我希望单击保存按钮时它能够传递正确的索引。
for (var i = 0; i < jsonObject.results.length; i++) {
var row = `<tr scope="row" class="test-row-${jsonObject.results[i].id}">
...
<td id="btn-list">
<button class="btn btn-sm btn-danger" data-testid="${jsonObject.results[i].id}" id="delete-${jsonObject.results[i].id}">Delete</button>
<button class="btn btn-sm btn-success" disabled data-testid="${jsonObject.results[i].id}" id="save-${jsonObject.results[i].id}">Save</button>
</td>
</tr>`;
$(`#save-${jsonObject.results[i].id}`).on('click', saveUpdate(i))
}
当前的保存按钮自动触发saveUpdate()并传递每个索引
$(document).on('click', `#save-${jsonObject.results[i].id}`, function(){
saveUpdate(i);
});
$(`#save-${jsonObject.results[i].id}`).click(function(){
saveUpdate(i);
});
这两个事件侦听器等待单击,但将传递jsonObject.results.length
而不是单击的索引。
这是由于吊装而发生的。我变量是由var关键字创建的,并且在循环中,您绑定了该事件。由于var具有功能范围,因此它保留了它的值,即使在绑定事件之后,当它访问它时,它也得到了最后一个值,即您的数组长度。
使用let相反它将起作用。让块范围。休息似乎很好。会工作的
for (let i = 0; i < jsonObject.results.length; i++) {
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句