2009-11-12 6 views
6

Tous,onglets UI préchargement JQuery en arrière-plan

Comment puis-je précharger tous les onglets JQuery UI alors que le premier onglet est toujours en cours de téléchargement? J'ai essayé la télécommande: option vraie, mais cela n'a pas fonctionné? Il doit y avoir des ajax à côté de chaque nom d'onglet pendant le chargement des onglets.

Merci

Répondre

10

Essayez quelque chose comme ceci:

$tabs = $('#tabs').tabs({ 
    cache: true 
}); 
var total = $tabs.find('.ui-tabs-nav li').length; 
var currentLoadingTab = 1; 
$tabs.bind('tabsload',function(){ 
    currentLoadingTab++; 
    if (currentLoadingTab < total) 
     $tabs.tabs('load',currentLoadingTab); 
    else 
     $tabs.unbind('tabsload'); 
}).tabs('load',currentLoadingTab); 

Il initialise les onglets avec l'option de cache de sorte que les onglets ne sont pas rechargés après avoir été chargés une fois. Il détermine ensuite le nombre total d'onglets et définit l'onglet suivant à charger en tant que 1 (les onglets sont indexés en commençant par 0) Ensuite, il lie un événement sur l'événement load pour commencer à charger l'onglet suivant jusqu'à ce qu'il les atteigne tous . Pour le démarrer, il charge ensuite le deuxième onglet.

+0

Cela fonctionne très bien! Merci .. Est-il possible de précharger plusieurs onglets à la fois, au lieu de les charger l'un après l'autre? Aussi, est-il possible de mettre une image spinner à côté du texte de l'onglet? Je ne veux pas qu'il affiche "Chargement .." .. Il devrait juste être le texte de l'onglet ajouté avec l'image spinner pendant le chargement de l'onglet .. Merci d'avance .. – Balu

+0

Le texte spinner est une option à envoyer to ui.tabs: $ abs = $ ('# tabs'). onglets ({ cache: true, spinner: '' }); – Lathan

+0

voulez-vous dire que les onglets sont indexés en commençant par 1? Sinon, ce code semble ne jamais charger l'onglet 2 puisque vous l'incrémentez avant d'appeler la charge – Andrey

0

solution plus élégante que ci-dessus:

$tabs = $('#tabs').tabs({ 
    cache : true, 
    load : function(event,ui) { 
     try { 
      $tabs.tabs('load',ui.index+1); 
     } catch (e) { 
     } 
    } 
}); 
+0

Cela ne rechargerait-il pas tous les onglets suivants à chaque fois que vous cliqueriez sur un onglet différent? Alors dis je passe par les onglets un à la fois. Lorsque je clique sur le premier onglet, tous les onglets seront chargés. Ensuite, lorsque je clique sur le deuxième onglet, tous les onglets après 2 seront chargés *** à nouveau ***. – Travesty3

Questions connexes