JQuery DataTables - fnReloadAjax () Как перезагрузить fnDrawCallback или fnInitComplete - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть таблица данных пользователей, для которых я разрешаю администраторам редактировать информацию.Но проблема в том, что для того, чтобы связать функции jquery с определенными ячейками в таблицах данных, нужно перечислить функции либо в параметрах fnDrawCallback, либо в fnInitComplete инициализации данных.Однако когда пользователь обновляет строку и выполняется fnReloadAjax (для отображения новых изменений), весь JQuery, который был связан с ячейками таблицы, больше не доступен!Я попытался поместить весь код JQuery в fnDrawCallback и fnInitComplete, и оба имеют одинаковый результат.Есть идеи?

    var oTable = $('.admin_users').dataTable({
    "bProcessing": true,
    "sAjaxSource": 'sql/admin_users.php',       
    "aaSorting": [[ 1, "asc" ]],
    "bJQueryUI": true,
    "sPaginationType": "full_numbers",
    "bStateSave": true, //Use a cookie to save current display of items
    "aoColumns": [
        {"asSorting": [  ]},
        null,
        null,
        null,
        { "sType": "date", "sClass":"center" }
    ],
    "fnDrawCallback": function(){
            //Edit row
            $('.button_edit').click(function(){
                $(':input[type="text"]').val('');
                $(':input[type="checkbox"]').removeAttr('checked');
                $('.admin_edit_button.button_update').attr('id',$(this).attr('id'));
                $('.admin_edit_user').slideDown();
                var userid = $(this).attr('id');
                //GET USER INFO
                $.ajax({
                    url: 'sql/admin_edit',
                    type: 'POST',
                    dataType: 'json',
                    data: 'getinfo=true&userid='+userid,
                    success: function(data){
                        //FILL IN INPUTS WITH USER VALUES
                    }
                });
                //UPDATE CHANGES
                $('.admin_edit_button.button_update').click(function(){
                    //GET NEW/UNCHANGED VALUES
                    $.ajax({
                        url: 'sql/admin_edit.php',
                        type: 'POST',
                        async: false,
                        data: //SEND DATA HERE,
                        success: function(response){
                            if(response=='true'){
                                $(':input[type="text"]').val('');
                                $(':input[type="checkbox"]').removeAttr('checked');
                                $('.admin_edit_user').slideToggle(function(){oTable.fnReloadAjax()});

                                alert("Success!");
                            }
                            if(response=='false')
                                alert('Failed to update user');
                        },
                        error: function(response){
                                alert('Failed to update user');
                        }
                    });
                });
            });
            $('.button_cancel').click(function(){
                $('.admin_edit_user').slideUp();
                $(':input[type="text"]').val('');
                $(':input[type="checkbox"]').removeAttr('checked');
            });
    },
    "bScrollCollapse": true,
    "sScrollX": "100%",
     "fnInitComplete": function() {
            oTable.fnAdjustColumnSizing();
     }
});

1 Ответ

0 голосов
/ 06 декабря 2011

Вы можете попробовать делегирование.

...
fnInitCallback: function(settings){
    $('tbody',settings.nTableWrapper).delegate('.button_edit', 'click', function(){
        // Edit handler
    });

    // Etc.
}

tbody не должно сорваться с перезагрузкой ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...