2015-09-04 3 views
1

У меня есть jquery datatable со многими пролетами в нем. Таблица загружается с помощью данных ajax из БД, тогда пролеты динамически обновляются, чтобы соответствовать всем другим пролетам с тем же классом, когда пользователь изменил значение.Обновление JQuery Datatable Cell Value

Проблема, с которой я сталкиваюсь, заключается в том, что когда я обновляю пропуски, данные, похоже, не знают, что они были обновлены.

Например, если я обновляю значение до 555, а затем выполним поиск 555, он не возвращает результат.

Я попытался использовать .draw(), но он не работает. Как я могу обновлять данные всех значений ячеек без разрушения и перестройки таблицы. Уничтожить просто похоже на массовый перебор.

+0

Вы обновляете таблицу на стороне клиента И db? Выполняется ли поиск на стороне сервера? – markpsmith

+0

Все на стороне клиента. Начальная загрузка получает ВСЕ значения для запуска, и это единственный вызов ajax. DataTable по существу действует как обычный, после этого без аякс-вызовов. Все остальное - клиентская сторона. Если вы посмотрите на комментарий Майкла Эмерсона, эта сценария jsfiddle.net/jebwq9yL иллюстрирует эту проблему. – Mav2287

+0

Я не очень хорошо знаком с клиентскими файлами данных, но мне кажется, что вы обновляете HTML, но не базовые данные. Возможно, что-то вроде этого поможет: [stackoverflow.com/questions/19629644/how-to-edit-a-row-in-the-datatable] (http://stackoverflow.com/questions/19629644/how-to-edit -a-row-in-the-datatable) – markpsmith

ответ

2

Я бьющийся на это какое-то время, и я думаю, что это может быть связано с кешем, который использует данные. Однако я обнаружил, что если вы найдете ячейку, тогда установите атрибут data в значение html ячейки, в которой он работает. Пока что вы бы сделали что-то подобное.

var UpdateTD = $(".changemade").parent('td'); 
table.cell(UpdateTD).data(UpdateTD.html()).draw(); 

Это действительно единственный способ, которым я нашел, чтобы заставить его работать. На самом деле это не лучший способ сделать это, но, похоже, он работает. Вот обновленная скрипка, показывающая ее в действии https://jsfiddle.net/jebwq9yL/1/

1

Определение table в качестве глобальной переменной, как этот

HTML Update Используется <td class="changemade">Tiger Nixon</td>. удаленный диапазон от вашего кода. для доступа к ячейке вы должны указывать имя класса или идентификатор на td не span.

var table; 
$(document).ready(function() { 
    ........ 
    // DataTable 
    table = $('#example').DataTable(); 
    ........ 
    }); 
$('.changebutton').on('click', function() { 
    // update cell value based on selector 
    table.cell($('.changemade')).data('MEOW!').draw() 
}); 
}); 
//and use this code to listen the draw event. 
table.on('draw', function() { 
    alert('table has been re-drawn') 
}); 

DEMO

В вашей скрипке поиск работает, потому что переменная table и search function находятся в том же области, но table.draw выходит за рамки, так что не работает

+0

Даже если вы это сделаете, хотя вы все еще не можете найти новое значение. Если вы ищете «MEOW!» он все равно не возвращает никаких результатов. Я нажал кнопку, увидев изменение значения nixon на «MEOW!», Но затем, когда я ищу его в глобальном поиске или в поиске по имени, он не вернет результаты. – Mav2287

+0

@ Mav2287. Я обновил свой ответ, проверьте его –

+0

Интересно, почему это не работает с диапазоном, но без него. В случае, если я должен использовать span, потому что у меня есть другие скрытые элементы, также как индикатор выполнения загрузки. – Mav2287

Смежные вопросы