Использование ajax.reload () в dataTables для сохранения входного текста

0

Я работаю над преобразованием кода из dataTables с 1.9 по 1.10, а также с использованием ajaxSource вместо предварительно заполненной таблицы.

Проблема заключается в том, что в моих строках таблицы есть поле ввода, и при заполнении нового источника я теряю данные, записанные в поле ввода. Я пробовал много обходных решений, но, похоже, не может получить что-то, что является бесшовным.

Ниже вы найдете PHP-код, генерирующий данные таблицы, а также поле ввода с классом user_list. Поскольку я обновляю данные таблицы каждые 30 секунд, я пытаюсь вытащить письменный текст и поместить его обратно, не зная, что данные обновлены.

Я попытался выполнить это, используя:

        setInterval(function() {
            var predata = $(".user_list:focus").val();
            var trid = $(".user_list:focus").closest('tr').attr('id');
            mainTable.ajax.reload(null, false);
            console.log(predata);
            console.log(trid);
            $("#" + trid + " .user_list").val(predata);
        }, 30000);

Однако значение ввода никогда не обновляется, хотя при правильной проверке идентификатора. Пожалуйста помогите.

JS:

mainTable = $("#main_dash").DataTable({
    "language": {
        "url": "../locale/" + locale + "/LC_MESSAGES/" + "dt." + locale + ".txt",
    },
    "pagingType": "full_numbers",
    "pageLength": 10,
    "ajax": {
        "url": "ajax_tables/main_table.php",
        "type": "POST"
    },
    "columnDefs": [
        { "orderable": false, "targets": 0 }
    ],
    "columns": [
        {"data": "flagged"},
        {"data": "date"},
        {"data": "type"},
        {"data": "regarding"},
        {"data": "submitted_by"},
        {"data": "review"},
        {"data": "assign"},
    ],
    "autoWidth":false,
    "order": [[1, 'asc']],
    "deferRender": true,
    "initComplete": function() {
        setInterval(function() {
            mainTable.ajax.reload(null, false);
        }, 30000);
    },
});

PHP Code (main_table.php):

foreach ( $data as &$d ) {
    $d['DT_RowId'] = $d['groom_id'];
    $d['DT_RowClass'] = 'groom-color-' . $d['type_id'];
    $d['review'] = '<button class="button button-blue review_item">Review</button>';
    $d['assign'] = '<span class="groom_id hidden">' . $d['groom_id'] . '</span><input type="text" class="user_list">';
    if ( preg_match('/1969-12-31/', $d['date'] )) {
        $d['date'] = $d['date2'];
    }
    if ( $d['flagged'] ) {
        $d['flagged'] = '<img src="images/red_flag.gif">';
    } else {
        $d['flagged'] = null;
    }
}

echo json_encode(array(
    "draw" => 1,
    "recordsTotal" => $count,
    "recordsFiltered" => 1,
    "data" => $data,    
));
Теги:
datatables

1 ответ

2
Лучший ответ

Добавьте обработчик onchange() в поле ввода и напишите значение с помощью ajax-вызова на ваш db.

Затем в следующей перезагрузке значения должны быть там снова.

Конечно, вы должны предотвратить автоматическую перезагрузку, когда данные записываются и перезагружаются, когда измененные данные были успешно сохранены в db, а затем снова активировать автоматическую перезагрузку. Может быть сделано с i am busy saving - don't auto-reload now флаг i am busy saving - don't auto-reload now.

  • 0
    Ваш гений: var typing = $ (". User_list: focus"). Val (); if (! typing) {mainTable.ajax.reload (null, false); }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню