javascript - 使用 JQuery/JavaScript 在 .append() 中添加带有 onclick 事件的按钮
问题描述
我想将删除按钮添加到状态为 ORDERED 的每一行。我尝试了不同的变化。即使 data[i] 不是未定义的,此解决方案也可以正常工作而不会出现“无法读取未定义的属性 'id'”的错误。在 .click() 给出正确的 id 之前发出警报。这里有什么问题?我可以在这里做一些不同或更好的事情吗?
).done( (data, status, jqXHR) => {
if(data[0].order_username != undefined) {
$("#orders_table").empty();
for(var i = 0; i < data.length; i++) {
var button = "";
if(data[i].status == "ORDERED") {
button = "<td><button class='delete'>Delete</button></td>";
}
$("#orders_table").append(
"<tr>" +
"<td>" + data[i].order_username + "</td>"+
"<td>" + data[i].work_description + "</td>" +
"<td>" + dateFormatter(data[i].orderdate) + "</td>" +
"<td>" + dateFormatter(data[i].startdate) + "</td>" +
"<td>" + dateFormatter(data[i].readydate) + "</td>" +
"<td>" + dateFormatter(data[i].accepteddate) + "</td>" +
"<td>" + dateFormatter(data[i].denieddate) + "</td>" +
"<td>" + data[i].comment_of_work + "</td>" +
"<td>" + data[i].hours + "</td>" +
"<td>" + data[i].approx_budget + "</td>" +
"<td>" + data[i].status + "</td>" +
button +
"</tr>"
)
alert(data[i].id);
$(".delete").click(() => {
deleteUser(data[i].id);
})
}
}
function deleteUser(key) {
$.ajax(
{
url: "http:localhost:3001/workorders_delete/"+key,
method: 'delete'
}).done( (data, status, jqXHR) => {
}).fail( (jqXHR, status, errorThrown) => {
console.log("Call failed: "+errorThrown);
});
}
解决方案
您可以使用响应数据中的 id 为删除按钮设置唯一数据属性,如下所示:-
if(data[i].status == "ORDERED") {
button = "<td><button class='delete' data-deleteId =
"+data[i].id+">Delete</button></td>";
}
然后您可以为删除按钮编写一个单击事件侦听器,如下所示:-
$(".delete").click(function(){
var id = $(this).data("deleteId");
deleteUser(id);
});
在您的代码中:-
$(".delete").click(() => {
deleteUser(data[i].id);
});
函数 deleteUser() 在点击时被调用或执行,此时 data[i].id 将不会被定义。
推荐阅读
- wordpress - WooCommerce find_matching_product_variation() - 当它们很少时如何优先考虑变化?
- c# - Azure DevOps Server:初始化作业时如何防止“访问路径被拒绝”?
- java - Swing Invoke Later Events 与模态对话框
- python - 为什么在这个while语句中继续表现得像一个中断?
- python - 将 response.text 转换为 python 中的字典
- spring - restTemplate.exchange 不会解组完整的对象,而只是顶级 - 替代 restTemplate?
- python - 有没有可能在 django 中提供备用数据库服务器?
- c - 在用户输入任意数量的值后计算正数、负数、偶数、奇数
- php - PHP curl:(60)SSL证书问题:自签名证书
- mongodb - MongoDB根据字段类型聚合后过滤文档