Таблицы данных jQuery — как применить функции ко всем строкам (не только к первым 10 показанным)

#jquery #function #datatables

#jquery #функция #таблицы данных

Вопрос:

Я использую плагин jQuery DataTables для отображения больших наборов данных. Одна вещь, которую я пытаюсь сделать, это сократить столбец «детали» (иногда они составляют около 1000 символов) до небольшой строки, чтобы все строки были одинаковой высоты и их было легче читать. Затем, когда пользователь нажимает на маленькую строку, открывается диалоговое окно и отображается полная информация.

Это отлично работает, но только для первых 10 строк (поскольку это все, что отображается по умолчанию). Как только я разворачиваю таблицу для отображения остальных строк, функция, похоже, не применяется к этим вновь показанным строкам. Есть ли в таблицах данных вызов или параметр, который будет применять функцию каждый раз, когда отображается отображаемый набор строк?

Вот вызов DataTables:

     $('#dataTable').dataTable({
    "bJQueryUI": true,
    "sPaginationType": "full_numbers",
    "fnInitComplete": function(){
        $('.display_results').show();
        $('.def').click(function(){
            var msg = $(this).next().text();
            $('.messages').messageBox();//Custom Dialog box call

        });
    }
});
  

Ответ №1:

Понял это! http://datatables.net/usage/callbacks используйте ‘fnDrawCallback’

     $('#dataTable').dataTable({
    "bJQueryUI": true,
    "sPaginationType": "full_numbers",
    "fnInitComplete": function(){
        $('.display_results').show();
    },
    "fnDrawCallback": function() {
        $('.def').click(function(){
            var msg = $(this).next().text();
            $('.messages').messageBox()//Custom Dialog
        });
    }
})
  

Комментарии:

1. спасибо за ваш ответ. я застрял на той же проблеме с 1 дня.

2. но у меня есть еще одна проблема: события на 2-й странице не работают в первый раз, когда я перехожу на страницу. чтобы заставить их работать, я возвращаюсь на первую страницу, а затем перехожу на 2-ю страницу, после чего она работает. что-нибудь, чтобы это исправить?

Ответ №2:

Я думаю, вы могли бы использовать свойство «fnDrawCallback» при объявлении «DataTable», как мы использовали в нашем недавнем проекте.

Ответ №3:

Лучше всего использовать живые события для такого рода вещей: http://datatables.net/faqs#events . В идеале подключаемый модуль MessageBox можно изменить для использования живых событий.

Аллан

Ответ №4:

На самом деле то, что вы должны были сделать, это:

 $(".def").live('click', function() {
//your code here
});
  

Комментарии:

1. .live() устарело, вы должны использовать .on() вместо этого.