我创建了一个为JavaScript数组重用拼接功能的函数,但是,一旦运行它,就无法重用。
var removePerson = function(d, person_id) {
var person_index = d.findIndex(i => i.id == person_id);
d.splice(person_index, 1);
return d;
};
我没有收到控制台错误。我不知道如何调试它。这是我的JSFiddle。
如果您运行该示例,则会看到您可以从列表中删除任何1个人,但是当您尝试删除其余2个人中的任何一个时,则不会发生任何事情(例如,控制台错误,控制台响应)。知道如何支持
removePerson()
函数的重用吗? 最佳答案
您的解决方案因populateList
的工作方式而无法正常工作。
在您的populateList
中,有一行:
$('#load').empty();
该行将清空表并删除
click
事件侦听器附带的按钮。然后,您添加一个全新的
button.delete
,它没有任何事件侦听器附加。要解决此问题,可以将
.on()
放入populateList
函数。var populateList = function(d) {
$("#load").empty();
var new_rows;
for(var i = 0; i < d.length; i++) {
new_rows += "<tr>" +
"<td>" + d[i].id + "</td>" +
"<td>" + d[i].name + "</td>" +
"<td>" + d[i].phone + "</td>" +
"<td><button class='delete' data-id='" + d[i].id + "'>delete</button></td>" +
"</tr>";
}
$("#load").append(new_rows);
// delete event
$(".delete").on("click", function() {
var delete_sel = $(this).attr("data-id");
populateList(removePerson(d, delete_sel));
});
};
这是工作中的jsFiddle。
或者,您可以使用this answer中的解决方案(这是一种更干净的解决方案imo)。
$("table").on("click",".delete", function() {
var delete_sel = $(this).attr("data-id");
populateList(removePerson(data, delete_sel));
});
关于他的答案为何适用于jQuery documentation的更多说明(请查看
selector
参数)。