#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 именно для этой цели