2013-06-26 4 views
7

Я новичок в jQuery, так что извините, если мой вопрос слишком прост.jQuery Datatables: Uncaught TypeError: Не удается прочитать свойство «asSorting» undefined

Я пытаюсь сделать что-то вроде этого:

$("#send-one").html('done. '); 

var tableProgress= $("<table id='table-progress'><tr><td></td></tr></table>"); 

$("#send-one").empty().append(tableProgress); 

tableProgress.dataTable({ 
    "bPaginate": false, 
    "bLengthChange": false, 
    "bFilter": true, 
    "bSort": false, 
    "bInfo": false, 
    "bAutoWidth": false 
}); 

Все это происходит внутри jQuery ui Dialog Box.

Это не работает, я думаю, это потому, что .dataTable() pluggin не может найти таблицу, поэтому я пытаюсь использовать jQuery $.when.

Ошибка это

Uncaught TypeError: Cannot read property 'asSorting' of undefined

Что мне нужно: использовать .datatable pluggin в таблице, которая вставляется в $("#send-one").html('done. ' + tableProgress) но, используя .datatable() непосредственно не может быть синхронизирован с введением.

Я также попытался:

$("#send-one").html('done. ' + tableProgress); 
$('#table-progress').dataTable(); 
+2

Не похоже, что вы используете отсроченного объекты, которые в значительной степени необходимые для этого. Что вы пытаетесь достичь? –

+2

Возможно, вам стоит объяснить, чего вы хотите достичь, вместо того, чтобы позволить нам угадать, основываясь на вашем неработающем коде. – GolezTrol

+0

извините. Я сделал редактирование. –

ответ

34

Этот другой переполнения стека вопрос был гораздо более четкого ответа, что он должен иметь <thead> и <tbody> работать: Jquery datatable integration error?

Ваш является отсутствие обоих.

+0

Это был ответ на мою проблему! Спасибо :) –

+2

Более года спустя и по-прежнему полезно. Благодаря! –

+0

Просто примечание: вам не нужны и , если вы поставляете столбцы через скрипт init – Amal

0

Вы не называйте любой асинхронной функции (например, вызывает некоторые AJAX), так что функция $.when не имеет смысла здесь.

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

var tableProgress; 
tableProgress = "<table id='table-progress'><tr><td></td></tr></table>"; 
$("#send-one").html('done. ' + tableProgress); 
$('#table-progress').dataTable(); 
+0

# table-progress не существует, когда документ готов ...он начинает существовать после загрузки файла ... –

+1

@Uer Moreira: Я обновил свой ответ – Atrox111

+0

Сначала я сделал это .. но это не сработает. Поэтому я думаю о $. Когда ... что я могу проверить? –

0
function someAction() { 
      var tableProgress; 
      tableProgress = $("<table id='table-progress'><tr><td></td></tr></table>"); 
      $("#send-one").append(tableProgress); 
      tableProgress.dataTable();          
} 

добавляет таблицу #send-one на документ готов, а затем вызывает DataTable на нем. Нет смысла использовать id, так как вы можете просто иметь его уже в объекте jQuery.

+0

У него есть документ готов, но # table-progress не существует в начале .. только после некоторого взаимодействия с пользователем .. –

+0

да обновил мой ответ. Вы можете просто поместить код таблицы в объект jQuery и добавить его в документ, а затем вызвать на нем dataTable. –

+0

не работает. = (Uncaught TypeError: Object

........
не имеет метода 'dataTable' –

0

Убедитесь, что вы правильно загрузили файл .js-плагина.

http://jsfiddle.net/CdRa5/6/

var tableProgress = $('<table id="table-progress"><thead><tr><th>heading</th><th>heading</th></tr></thead><tbody><tr><td>cell</td><td>cell</td></tr><tr><td>cell</td><td>cell</td></tr></tbody></table>'); 
$("#send-one").empty().append(tableProgress); 
tableProgress.dataTable(); 
+0

Спасибо, не работает ... все равно такая же ошибка .. внутри диалогового окна jquery ui ... может ли это быть ошибкой? –

+0

попробуйте изменить третью строку, чтобы снова выбрать узел DOM: $ ('# table-progress'). dataTable(); И не забывайте о правильной структуре таблицы, этот плагин не работает на таблице без заголовков. – mkutyba

8

Я сделал это, и это работает. по-видимому, какая-то проблема с aoSorting из datatables. Я не знаю почему.

$("#send-one").html('done. '); 

var tableProgress= $("<table id='table-progress'><tr><th></th></tr><tr><td></td></tr></table>"); 

$("#send-one").empty().append(tableProgress); 

tableProgress.dataTable({ 
    "aoColumns": [ 
      null 
     ] 
}); 
1

Если вы используете dataTable columnFilter плагин, этот вопрос решил мою проблему.

Просто измените _fnColumnIndex так:

function _fnColumnIndex(iColumnIndex) { 
     return iColumnIndex; 
}