Предупреждение Datatables (таблица id = 'example'): не может повторно инициализировать таблицу данных
Я работаю с примером datatables и получаю такую ошибку при загрузке страницы:
Предупреждение о значениях данных (таблица id = 'example'): не удается повторно инициализировать таблицу данных.
Чтобы получить объект DataTables для этой таблицы, не передавайте аргументы или смотрите документы для bRetrieve и bDestroy.
Я пытался проверить fnRowCallback
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>DataTables live example</title>
<script type="text/javascript" charset="utf-8" src="DataTables/media/js/jquery.js"></script>
<script class="jsbin" src="http://datatables.net/download/build/jquery.dataTables.nightly.js"></script>
<style type="text/css">
@import "DataTables/media/css/demo_table.css";
</style>
</head>
<body id="dt_example">
<script>
$(document).ready(function() {
$('#example').dataTable();
} );
$(document).ready( function() {
$('#example').dataTable( {
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
// Bold the grade for all 'A' grade browsers
if ( aData[4] == "A" )
{
$('td:eq(4)', nRow).html( '<b>A</b>' );
}
}
} );
} );
</script>
<div id="container">
<h1>Live example</h1>
<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
<thead>
<tr>
<th>Rendering engine</th>
<th>Browser</th>
<th>Platform(s)</th>
<th>Engine version</th>
<th>CSS grade</th>
</tr>
</thead>
<tbody>
<tr class="odd gradeX">
<td>Trident</td>
<td>Internet Explorer 4.0</td>
<td>Win 95+</td>
<td class="center"> 4</td>
<td class="center">X</td>
</tr>
<tr class="even gradeC">
<td>Trident</td>
<td>Internet Explorer 5.0</td>
<td>Win 95+</td>
<td class="center">5</td>
<td class="center">C</td>
</tr>
<tr class="odd gradeA">
<td>Trident</td>
<td>Internet Explorer 5.5</td>
<td>Win 95+</td>
<td class="center">5.5</td>
<td class="center">A</td>
</tr>
<tr class="even gradeA">
<td>Trident</td>
<td>Internet Explorer 6</td>
<td>Win 98+</td>
<td class="center">6</td>
<td class="center">A</td>
</tr>
<tr class="odd gradeA">
<td>Trident</td>
<td>Internet Explorer 7</td>
<td>Win XP SP2+</td>
<td class="center">7</td>
<td class="center">A</td>
</tr>
<tr class="even gradeA">
<td>Trident</td>
<td>AOL browser (AOL desktop)</td>
<td>Win XP</td>
<td class="center">6</td>
<td class="center">A</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Firefox 1.0</td>
<td>Win 98+ / OSX.2+</td>
<td class="center">1.7</td>
<td class="center">A</td>
</tr>
<tr class="gradeA">
<td>Gecko</td>
<td>Firefox 1.5</td>
<td>Win 98+ / OSX.2+</td>
<td class="center">1.8</td>
<td class="center">A</td>
</tr>
</tbody>
<tfoot>
<tr>
<th>Rendering engine</th>
<th>Browser</th>
<th>Platform(s)</th>
<th>Engine version</th>
<th>CSS grade</th>
</tr>
</tfoot>
</table>
</div>
</body>
</html>
Что я делаю в этом неправильно?
Ответы
Ответ 1
Вы дважды инициализируете данные, почему?
// Take this off
/*
$(document).ready(function() {
$( '#example' ).dataTable();
} );
*/
$(document).ready( function() {
$( '#example' ).dataTable( {
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
// Bold the grade for all 'A' grade browsers
if ( aData[4] == "A" )
{
$('td:eq(4)', nRow).html( '<b>A</b>' );
}
}
} );
} );
Ответ 2
Попробуйте добавить "bDestroy": true для литерала объектов опций, например
$('#dataTable').dataTable({
...
....
"bDestroy": true
});
Источник: iodocs.com
или Удалить первый:
$(document).ready(function() {
$('#example').dataTable();
} );
В вашем случае это лучший вариант vjk.
Ответ 3
Вы также можете уничтожить старый datatable
, используя следующий код перед созданием нового datatable
:
$("#example").dataTable().fnDestroy();
Ответ 4
$('#example').dataTable();
Сделайте это классом, чтобы вы могли создавать несколько таблиц за раз
$('.example').dataTable();
Ответ 5
Эта проблема возникает, если мы инициализируем dataTable более одного раза. Затем нам нужно удалить предыдущий.
С другой стороны, мы можем уничтожить старый datatable таким образом и перед созданием нового datatable используйте следующий код:
$("#example").dataTable().fnDestroy();
Существует еще один сценарий, скажем, вы отправляете более одного запроса ajax, ответ которого будет иметь доступ к одной и той же таблице в одном шаблоне, тогда мы также получим ошибку. В этом случае метод fnDestroy не работает должным образом, потому что вы не знаете, какой ответ приходит первым или позже. Затем вы должны установить bRetrieve TRUE
в конфигурации таблицы данных. Это его.
Это мой сенарио:
<script type="text/javascript">
$(document).ready(function () {
$('#DatatableNone').dataTable({
"bDestroy": true
}).fnDestroy();
$('#DatatableOne').dataTable({
"aoColumnDefs": [{
"bSortable": false,
"aTargets": ["sorting_disabled"]
}],
"bDestroy": true
}).fnDestroy();
});
</script>
Ответ 6
Вы можете добавить destroy:true
в конфигурацию, чтобы убедиться, что уже существующая таблица данных удалена перед повторной инициализацией.
$('#example').dataTable({
destroy: true,
...
});
Ответ 7
Удалить первое:
$(document).ready(function() {
$('#example').dataTable();
} );
Ответ 8
Добавьте "bDestroy": true в вашей таблице данных. Как: -
$('#example').dataTable({
....
stateSave: true,
"bDestroy": true
});
Будет работать.
Ответ 9
Ищите длинную строку в коде, где вы сначала создаете таблицу, которая выглядит как
jQuery(document).ready(function() {
jQuery("#example").dataTable({"bLengthChange":true,"bPaginate":true, "bJQueryUI":true}).rowGrouping({bExpandableGrouping:true, bExpandSingleGroup:false, iExpandGroupOffset:-1, asExpandedGroups:[""]});
GridRowCount();
ResetSearchField();
});
затем добавьте следующую строку в следующую строку, чтобы изменить параметры в поле выбора
"aLengthMenu": [[60, 120, 240, -1], [20, 40, 80, "All"]]
или добавьте то, что ниже, чтобы изменить выбранный параметр в поле выбора (просто убедитесь, что оно совпадает с исходным значением там, или если вы добавили вышеприведенную строку, чтобы он соответствовал одному из чисел в нем.
"iDisplayLength": 60
конечный результат с добавлением обоих указанных выше параметров выглядит так, когда с первым кодом, вставленным выше:
jQuery(document).ready(function() {
jQuery("#example").dataTable({"iDisplayLength": 60, "aLengthMenu": [[60, 120, 240, -1], [20, 40, 80, "All"]], "bLengthChange":true, "bPaginate":true, "bJQueryUI":true}).rowGrouping({bExpandableGrouping:true, bExpandSingleGroup:false, iExpandGroupOffset:-1, asExpandedGroups:[""]});
GridRowCount();
ResetSearchField();
});
Ответ 10
В моем случае
С
<table id="example" class="display compact table-hover" cellspacing="0" >
Для
<table id="example" class="table table-condensed table-hover" cellspacing="0" >
Решила мою проблему