Несколько таблиц данных на разных вкладках, одна с исходным кодом Ajax

#jquery #ajax #datatables

#jquery #ajax #таблицы данных

Вопрос:

У меня есть 2 таблицы на 2 вкладках. Таблица на вкладке по умолчанию отлично отображает таблицы данных. Вторая таблица заполняется из исходного кода Ajax (массив JSON). Проблема в том, что я не могу инициализировать эту таблицу таблицами данных.

 $(document).ready(function() {

    //When page loads...
    $(".tab_content").hide(); //Hide all content
    $("ul.tabs li:first").addClass("active").show(); //Activate first tab
    $(".tab_content:first").show(); //Show first tab content

    //On Click Event
    $("ul.tabs li").click(function() {

        $("ul.tabs li").removeClass("active"); //Remove any "active" class
        $(this).addClass("active"); //Add "active" class to selected tab
        $(".tab_content").hide(); //Hide all tab content

        var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab   content
        if(activeTab == "#tab2"){   
        $.getJSON("<url>",              
            function(data) {
                    htmlTable = '<table id="table2" cellspacing="1" cellpadding="1" border="1">'; 
                                    htmlTable =<data...>;
                    htmlTable  ='</tbody></table>';
                        $('#table2').remove();
                        $('#tab2').append(htmlTable);
            });

        }

               $(activeTab).fadeIn(); //Fade in the active ID content
        return false;
    });

});
  

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

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

1. Я исправил это, явно инициализировав таблицы данных после проверки, присутствует ли одна, и удалив ее : ‘if ($(«#table2_wrapper»). длина > 0){ $(‘#table2_wrapper’).remove(); }’

Ответ №1:

У меня есть несколько вопросов.Почему вы используете, $,getJSON() когда d ataTables имеет встроенную функциональность для этого? Почему вы создаете таблицу динамически onclick вкладки?ЕСЛИ вы хотите загружать содержимое таблицы только при нажатии на вторую вкладку, тогда создайте статическую таблицу и поместите код инициализации таблиц данных в код onclick tab2

HTML

 <div id="tab2" class="tab_content">
  <table class="display dataTable" id="table2">
    <thead>
      <tr>col1</tr>
       ....
    </thead> 
    <tbody>
    </tbody>
  </table>
</div>
  

jQuery

 $("ul.tabs li").click(function() {

        $("ul.tabs li").removeClass("active"); //Remove any "active" class
        $(this).addClass("active"); //Add "active" class to selected tab
        $(".tab_content").hide(); //Hide all tab content

        var activeTab = $(this).find("a").attr("href"); 
        if(activeTab == "#tab2"){          
           oTable2 = $('#table2').dataTable({
            "bProcessing": true,
                "sAjaxSource": "yourURL"
        }
        $(activeTab).fadeIn(); //Fade in the active ID content
        return false;
    });
  

Я все еще думаю, что вам следует загружать вторую таблицу при загрузке страницы, а не при нажатии на вторую вкладку, если размер содержимого не слишком велик

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

1. Ваше предложение выдало мне ошибку. Таблица заполняется массивом JSON через getJSON.

2. вот что я хочу сказать, если вы используете ajax и json, то почему вы используете getJSON метод, почему бы вам не использовать ajaxSource функцию, предоставляемую плагином DataTable именно для этой цели