1

DataTables に奇妙な問題があります。私はこのようなものを使用して行を削除していますが、すべてが機能しています(行はDBから削除され、アラートは適切に表示されます)、表示から行が削除されますが、前のページをクリックして行が最初に表示されたページに戻ると(ページごと) DataTableのページ番号を意味するか、ページごとの行数を増やします)-再び表示されます...(実際には削除されていないため)

ハードリフレッシュ後にのみ削除されます。なぜこれが起こっているのですか?実際にブラウザを更新せずに実際に削除する方法は?

行を削除するために使用しているコードは次のとおりです。

function DeletePublisher(element, publisherid) {
jConfirm('Are you sure you want to delete this publisher?', 'Delete publisher', function (r) {
    if (r) $.post('includes/publishers/delete-publisher.php?publisherid=' + publisherid,

    function (data) {
        if ($.trim(data) == 'error') {
            $.jGrowl('This publisher was already deleted', {
                header: '<strong style="text-align:center;">ERROR</strong>'
            });
            $(element)
                .parents('tr')
                .remove();
        } else {
            $(element)
                .parents('tr')
                .remove();
            oTable.fnDeleteRow(element);
            $('tr')
                .removeClass();
            // Now add class names again
            $('tr:odd')
                .addClass('odd');
            $('tr:even')
                .addClass('even');

            $.jGrowl('Publisher deleted');
        }
    });
});

そして、これは TR 要素です:

<td class="action-th">
                    <ul class="button-table-head">
                            <li><div class="button-head edit-icon"><a href="/includes/publishers/edit-publisher.php?editpublisher=<?php echo $publisher_id; ?>" data-fancybox-type="iframe" class="iframe sweet-tooltip" data-text-tooltip="Edit" data-style-tooltip="tooltip-mini-slick"><span>Edit</span></a></div></li>
                        <li><div class="button-head delete-icon"><a href="#" class="sweet-tooltip" data-text-tooltip="Delete" data-style-tooltip="tooltip-mini-slick" onclick="DeletePublisher(this,'<?php echo $publisher_id; ?>')"><span>Delete</span></a></div></li>
                    </ul>
                </td>

要素が最初に行の正しい ID を渡しているかどうかわかりませんか?

4

1 に答える 1

1

要素を DOM から削除する代わりに、Datatable からも行を削除し$(element).parents('tr').remove();たい場合があります。fnDeleteRowDatatables にテーブルを再描画するように指示するメソッドにパラメーターを渡すことができます。これにより、データを更新するためにポストバックを行う必要がなくなります。

Datatables APIへのリンクは次のとおりです。fnDeleteRow

アップデート:

次のようなことを試してください:

function DeletePublisher(element, publisherid) {
jConfirm('Are you sure you want to delete this publisher?', 'Delete publisher', function (r) {
    if (r) $.post('includes/publishers/delete-publisher.php?publisherid=' + publisherid,

    function (data) {
        var nTr = $(element).closest('tr');

        oTable.fnDeleteRow(nTr, null, true);

        if ($.trim(data) == 'error') {
            $.jGrowl('This publisher was already deleted', {
                header: '<strong style="text-align:center;">ERROR</strong>'
            });
        } else {
            $.jGrowl('Publisher deleted');
        }            
    });
});
于 2012-09-26T15:09:15.567 に答える