Я создал эту скрипку, и она хорошо работает в соответствии с моими требованиями: Fiddle
Однако, когда я использую то же самое в своем приложении, я получаю сообщение об ошибке в консоли браузера: Cannot read property 'aDataSort' of undefined
В моем приложении javascript читает что-то вроде следующего: Я проверил вывод контроллера ... он работает хорошо и также печатается на консоли.
$(document).ready(function() {
$.getJSON("three.htm", function(data) {
// console.log("loadDataTable >> "+JSON.stringify(data));
})
.fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ', ' + error;
alert(err);
console.log( "Request Failed: " + err);
})
.success(function(data){
loadDataTable(data);
});
function loadDataTable(data){
$("#recentSubscribers").dataTable().fnDestroy();
var oTable = $('#recentSubscribers').dataTable({
"aaData" : JSON.parse(data.subscribers),
"processing": true,
"bPaginate": false,
"bFilter": false,
"bSort": false,
"bInfo": false,
"aoColumnDefs": [{
"sTitle": "Subscriber ID",
"aTargets": [0]
}, {
"sTitle": "Install Location",
"aTargets": [1]
}, {
"sTitle": "Subscriber Name",
"aTargets": [2]
}, {
"aTargets": [0],
"mRender": function (data, type, full) {
return '<a style="text-decoration:none;" href="#" class="abc">' + data + '</a>';
}
}],
"aoColumns": [{
"mData": "code"
}, {
"mData": "acctNum"
}, {
"mData": "name"
}]
});
}
})
javascript
jquery
jquery-datatables
Swateek
источник
источник
Ответы:
Важно, чтобы ваш THEAD не был пустым в таблице, поскольку dataTable требует, чтобы вы указывали количество столбцов ожидаемых данных. По вашим данным это должно быть
<table id="datatable"> <thead> <tr> <th>Subscriber ID</th> <th>Install Location</th> <th>Subscriber Name</th> <th>some data</th> </tr> </thead> </table>
источник
"Sort":false
, затем он смог просмотреть список в порядке убывания, который поступил от контроллера какModel.OrderByDescending(x=>x.Action==0).ThenBy(x=>x.Action)
.<thead>
обязательно должно быть а<tr>
, затем<th>
с<thead>
но вы должны определить столбцы в своем инициировании DataTable () следующим образом: datatables .net / reference / option / columns.dataТакже была эта проблема, этот массив был вне диапазона:
order: [1, 'asc'],
источник
Для меня ошибка была в самом DataTables; Код для сортировки в DataTables 1.10.9 не проверяет границы; таким образом, если вы используете что-то вроде
order: [[1, 'asc']]
с пустой таблицей нет строки idx 1 -> это исключение гарантирует. Это произошло, когда данные для таблицы были получены асинхронно. Первоначально при загрузке страницы dataTable инициализируется без данных. Его следует обновить позже, как только будут получены данные результата.
Мое решение:
// add within function _fnStringToCss( s ) in datatables.js // directly after this line // srcCol = nestedSort[i][0]; if(srcCol >= aoColumns.length) { continue; } // this line follows: // aDataSort = aoColumns[ srcCol ].aDataSort;
источник
Я столкнулся с той же проблемой, следующие изменения решили мою проблему.
$(document).ready(function() { $('.datatable').dataTable( { bSort: false, aoColumns: [ { sWidth: "45%" }, { sWidth: "45%" }, { sWidth: "10%", bSearchable: false, bSortable: false } ], "scrollY": "200px", "scrollCollapse": true, "info": true, "paging": true } ); } );
aoColumns
массив описывает ширину каждого столбца и егоsortable
свойства.источник
В моем случае у меня было
$(`#my_table`).empty();
Где это должно было быть
$(`#my_table tbody`).empty();
Примечание: в моем случае мне пришлось очистить таблицу, так как у меня были данные, которые я хотел удалить, прежде чем вставлять новые данные.
Просто подумал о том, чтобы поделиться, где это «может» помочь кому-то в будущем!
источник
У меня была эта проблема, потому что другой сценарий удалял все таблицы и воссоздавал их, но моя таблица не создавалась заново. Я потратил много времени на эту проблему, прежде чем заметил, что моя таблица даже не отображается на странице. Можете ли вы увидеть свою таблицу перед инициализацией DataTables?
По сути, другой скрипт делал:
let tables = $("table"); for (let i = 0; i < tables.length; i++) { const table = tables[i]; if ($.fn.DataTable.isDataTable(table)) { $(table).DataTable().destroy(remove); $(table).empty(); } }
И это должно было быть:
let tables = $("table.some-class-only"); ... the rest ...
источник
Вам нужно переключить одинарные кавычки
[']
на двойные кавычки["]
из-за синтаксического анализаесли вы используете атрибут порядка данных в таблице, используйте его так
data-order='[[1, "asc"]]'
источник
В моем случае я решил проблему, установив действительный номер столбца при применении
order
свойства внутри сценария, в котором вы настраиваете таблицу данных.var table = $('#mytable').DataTable({ . . . order: [[ 1, "desc" ]],
источник