Невозможно использовать fnAddData, когда таблица пуста

0

Я использую таблицу с плагином jQuery dataTable. Когда я использую функцию fnAddData она работает, за исключением случаев, когда таблица пуста. Затем я получаю эту ошибку:

Невозможно прочитать свойство "className" неопределенного

Вот как я добавляю свои данные:

$("#table-1").dataTable().fnAddData([
            data[0],
            data[1],
            data[2],
            data[3],
            data[4],
            data[5],
            data[6],
            data[7],
            data[8],
            ]);

И у меня такая же проблема с fnDeleteRow с этим сообщением об ошибке:

Невозможно прочитать свойство "nTr" неопределенного

Здесь, как я использую fnDeleteRow, у меня нет проблем, когда таблица не пуста...

$("#table-1").dataTable().fnDeleteRow(tr)

где tr - селектор.

Я что-то упускаю?

Здесь моя вкладка HTML с одной последней строкой:

<table id="table-1" class="table table-hover table-nomargin table-colored-header        dataTable" aria-describedby="table-1_info">
<thead>
<tr role="row">
<th class="sorting" role="columnheader" tabindex="0" aria-controls="table-1" rowspan="1" colspan="1">Pays</th>
</tr>
</thead>
<tbody role="alert" aria-live="polite" aria-relevant="all">
<tr class="odd">
<td class=" sorting_1">
<div id="address23name">test</div>
</td></tr></tbody></table>

И вот мой JS

$("#deleteAddressButton").click(function(){
    var id = $("#deleteAddressId").val();
    $.post("/Contacts/deleteAddress",
            {data: id}, function(data) {
          var id = $.parseJSON(data);
          var tr = $("tr:has(td:has(div:contains(\"address\" + id + \"Name\")))");
          $("#table-1").dataTable().fnDeleteRow(tr)
        });
})
Теги:
jquery-datatables

2 ответа

0

jQuery не позволяет DataTables получать доступ к данным так, как он предпочитает. Чтобы дать ему узел, который он хочет, вам, вероятно, придется применить [0] или.get(0) к концу вашего объекта jQuery. На самом деле это то, что возвращает jQuery - объект - и, как правило, именно то, с чем вам удобно работать.

DataTables хочет узел.

Вот некоторые ссылки, которые показывают, что разработчик дает подсказки о том, как получить доступ к данным в разных обстоятельствах, - но с той же ошибкой во 2-й ссылке: здесь и здесь

Мораль этой истории заключается в том, что если DataTables ожидает стол "узел", вам нужно сделать некоторые дополнительные шаги для удаления дополнительного контейнера jQuery, в который он помещен.

Таким образом, ваш код будет выглядеть так, и я считаю, что должен обрабатывать ваше состояние ошибки. В противном случае обязательно выполните поиск имени ошибки и функции на DataTables.net. Этот форум очень активен и полезен.

var tr = $("tr:has(td:has(div:contains(\"address\" + id + \"Name\")))");
$("#table-1").dataTable().fnDeleteRow(tr[0])

или

var tr = $("tr:has(td:has(div:contains(\"address\" + id + \"Name\")))");
$("#table-1").dataTable().fnDeleteRow(tr.get(0))

или, конечно же, добавить его в конец вашего длинного оператора $("tr:has...).

Вариант 2:

  • Просто скройте строку, которую хотите удалить.
  • Если эти идеи не помогут, вы можете найти ответы алланта здесь проницательно.
0

Вот простой jsfiddle, который позволяет добавить строку в пустую таблицу: http://jsfiddle.net/7UZGM/

Так что же изменилось в вашей таблице? Когда вы говорите "пусто", у него все еще есть секция thead/tr/th и пустое тело? Они необходимы для правильной работы данных.

$('#dt').dataTable();

$('#btn').on('click',function() { addData(); });

function addData()
{
    $("#dt").dataTable().fnAddData([
            "col 1", "col 2", "col 3"]);
}
  • 0
    Спасибо за JS, моя проблема в том, что когда я использую .dataTable () в моей таблице, в tbody у меня появляется пустой <tr> </ tr>, вы знаете, откуда он может прийти?
  • 0
    Из вашего кода :) Как вы генерируете таблицу? Можете ли вы показать код для генерации таблицы? Когда страница создана, есть ли в таблице пустой TR? Или это происходит только при удалении всех строк? Извините, но нам нужно больше информации.
Показать ещё 1 комментарий

Ещё вопросы

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