Строка Datatables не удаляется внутри метода $ .post - PullRequest
0 голосов
/ 10 мая 2019

У меня есть этот блок кода, который корректно работает для удаления строки из таблицы, когда я щелкаю по выбранному <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() $.post
Обратите внимание, что вопрос не в процессе удаления.

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Внутри обратного вызова this относится к jqXHR объекту вызова ajax, а не к элементу, с которым связан обработчик события.Так что table.row($(this).parents('tr')).remove().draw(); не работает.Подробнее здесь

0 голосов
/ 10 мая 2019

Согласно предварительному ответу: this внутри '.done ()' относится к 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...