我具有这段代码,当我单击选定的<td>
var table = $('#students-table').DataTable();
$('#students-table tbody').on('click', 'i.icon-delete', function () {
table.row($(this).parents('tr')).remove().draw();
});
但是当我将此行嵌入$ .post.done时,它根本不起作用:
var table = $('#students-table').DataTable();
$('#students-table tbody').on('click', 'i.icon-delete', function () {
var student_id = $(this).attr('student_id');
$.post("backend.php", {"action": "deleteStudent", "student_id": student_id}).done(function (response) {
response = JSON.parse(response);
if (response.deleted == "1") {
console.log("A");
table.row($(this).parents('tr')).remove().draw();
console.log("B");
}
}); // post
});
无论条件response.deleted == "1"
评估为True
,并且console.log("A");
和console.log("B");
也可以正常工作。
那么,为什么行删除行在done()
的{{1}}函数中时不起作用
请注意,问题与删除过程无关。
答案 0 :(得分:1)
在回调this
中,它引用了ajax调用的jqXHR
对象,而不是事件处理程序所绑定的元素。因此table.row($(this).parents('tr')).remove().draw();
不起作用。
更多信息here
答案 1 :(得分:0)
根据预览答案:'.done()'中的this
引用jqXHR
而不是选择器i.icon-delete
的选定元素。
解决方案是将i.icon-delete
选择的选定元素$(this)
分配给$.post
之外的变量,然后在$.post
内再次使用它。这种使用$(this)
的方式是指i.icon-delete
而不是jqXHR
$('#students-table tbody').on('click', 'i.icon-delete', function () {
var rowToRemove = $(this).parents('tr');
var student_id = $(this).attr('student_id');
$.post("backend.php", {"action": "deleteStudent", "student_id": student_id}).done(function (response) {
response = JSON.parse(response);
if (response.deleted == "1") {
table.row(rowToRemove).remove().draw();
}
}); // post
});