Я работаю над преобразованием кода из 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,
));
Добавьте обработчик onchange()
в поле ввода и напишите значение с помощью ajax-вызова на ваш db.
Затем в следующей перезагрузке значения должны быть там снова.
Конечно, вы должны предотвратить автоматическую перезагрузку, когда данные записываются и перезагружаются, когда измененные данные были успешно сохранены в db, а затем снова активировать автоматическую перезагрузку. Может быть сделано с i am busy saving - don't auto-reload now
флаг i am busy saving - don't auto-reload now
.