Selon le guide de mise à niveau pour les onglets jquery-ui 1.9 - http://jqueryui.com/upgrade-guide/1.9/#deprecated-add-and-remove-methods-and-events-use-refresh-method - lors de l'ajout dynamique de nouveaux onglets, il suffit de faire quelque chose comme ceci:
HTML:
<div id='tabs'>
<ul>
<li><a href='#tab1'>#1</a></li>
</ul>
<div id='tab1'></div>
</div>
<button id='add-tab'>Add tab</button>
JavaScript:
$(document).ready(function() {
$("div#tabs").tabs();
$("button#add-tab").click(function() {
var num_tabs = $("div#tabs ul li").length + 1;
$("div#tabs ul").append(
"<li><a href='#tab" + num_tabs + "'>#" + num_tabs + "</a></li>"
);
$("div#tabs").tabs("refresh");
});
});
Cependant, lorsque j'essaie de changer entre les onglets nouvellement créés, j'obtiens l'erreur suivante dans Firebug:
onglets jQuery UI: identifiant de fragment incompatible.
Si je comprends bien, cette erreur signifie que le panneau à onglets réel n'est pas en cours de création (et qu'il y a donc une incompatibilité entre le panneau de navigation et le panneau à onglets). Mais le guide de mise à niveau ne fait aucune mention de la création d'un panneau à onglets.
Je suppose donc que je me trompe ou que le guide de mise à niveau est incomplet. Précisez s'il vous plaît.
Chose intéressante, lors de la suppression des onglets, le guide de mise à niveau indique que vous devez supprimer explicitement à la fois l'élément de liste du panneau de navigation et le panneau d'onglets, donc je me demande si la même chose s'applique à l'ajout d'onglets.
Le guide doit être incomplet, vous devez ajouter un panneau à onglets
$(document).ready(function() {
$("div#tabs").tabs();
$("button#add-tab").click(function() {
var num_tabs = $("div#tabs ul li").length + 1;
$("div#tabs ul").append(
"<li><a href='#tab" + num_tabs + "'>#" + num_tabs + "</a></li>"
);
$("div#tabs").append(
"<div id='tab" + num_tabs + "'>#" + num_tabs + "</div>"
);
$("div#tabs").tabs("refresh");
});
});
Après chaque ajout d'onglet, vous devez créer un div pour afficher le contenu comme pour créer tab number 2
$("div#tabs").append("<div id='tab"+num_tabs+"'></div>");
vérifier le violon http://jsfiddle.net/AJDLt/1/
Donc, la bonne façon de le faire comme une bonne réponse mais sans nub_tabs.
$("div#tabs").tabs();
var tab_id = 1;
$("button#add-tab").click(function() {
tab_id++; //It can be any id;
$("div#tabs ul").append(
'<li id="'+tab_id+'"><a href="#tab"'+tab_id+'">#"+tab_id+"</a><i class="close-tab" target="'+tab_id+'"></i></li>');
$("div#tabs").append(
'<div id="'+tab_id+'">#'+tab_id+'</div>');
$("div#tabs").tabs("refresh");
});
//Now i want to show some functions from my code;
//It will not work for you, just want show the idea;
//No clone tabs
function if_tab_exist(thisI) { //thisI - contains some id, title and text for tab content.
var tab_id = $(thisI).attr('id');
if(!$('.ui-tabs-nav li#'+tab_id).is('*')) {
addTab(thisI); //Add tab function
} else {
var TAB_index = $('.ui-tabs-nav li#'+tab_id).index();
$("#tabs").tabs({active: TAB_index}); //Will activate already exist tab
}
}
//Close tab
function close_tab(tab_id) {
$('.ui-tabs-nav i[target='+tab_id+']').parent().remove();
$('#tabs div#'+tab_id+']').remove();
$("#tabs").tabs("refresh");
}
//Events
//CLose
$("body").on('click','.ui-tabs-nav .ui-state-default i', function() {
close_tab($(this).attr('target'));
});
//Add
$("body").on('click','.addTab', function() {
if_tab_exist(this);
});
Il est ennuyeux que les onglets "add"
Aient été supprimés, mais jQuery est très facile à étendre. Ajoutez simplement votre propre méthode addTab
.
par exemple. Quelque chose comme ça:
// jQuery extension method
$.fn.addTab = function (name) {
$('ul', this).append('<li><a href="#tab-' + name + '">' + name + '</a></li>');
$(this).append("<div id='tab-" + name + "'></div>");
$(this).tabs("refresh");
};
Et utilisez simplement comme ceci:
$('#tabs').addTab("NewTab");
$('#tabs').addTab("Another NewTab");
$('#tabs').addTab("etc");
JSFiddle: http://jsfiddle.net/TrueBlueAussie/AJDLt/315/
Comme suggéré par @Andy, vous devez lui faire utiliser .first()
si vous imbriquez des onglets dans votre interface:
par exemple. Quelque chose comme ça:
// jQuery extension method
$.fn.addTab = function (name) {
$('ul', this).first().append('<li><a href="#tab-' + name + '">' + name + '</a></li>');
$(this).append("<div id='tab-" + name + "'></div>");
$(this).tabs("refresh");
};
Un exemple est décrit plus en détail ici en plus il y a version exécutable est sur le site officiel de jquery ui avec son code source.
Une simple déclaration pourrait ressembler à ceci:
var addTab = function (tabs, tabId, tabLabel, tabContentHtml) {
var header = "<li><a href='#" + tabId + "'>" + tabLabel + "</a> </li>"
tabs.find(".ui-tabs-nav").append(header);
tabs.append("<div id='" + tabId + "'><p>" + tabContentHtml + "</p></div>");
tabs.tabs("refresh");
};
L'ajout d'un nouvel onglet devient plus facile, il suffit de taper ce qui suit:
$("#tabs_area").tabs();
addTab($("#tabs_area"), "tab_id1", "Tab 1", "this is just test");