JQuery UI Tabs - "Chargement..." message

Tous,

j'utilise des onglets imbriqués jQuery UI. Je me demandais juste s'il y avait un moyen d'afficher une image de Spinner AJAX à côté du texte de l'onglet, pendant que l'onglet est en train de charger. Je ne veux pas changer l'onglet texte de "Chargement..". Considérez que lorsque plusieurs onglets se chargent en même temps ou l'un après l'autre, l'image de spinner doit être affichée à côté de chaque onglet de chargement..

Des Suggestions?

Merci

26
demandé sur Ikke 2009-11-13 19:03:02

4 réponses

si vous utilisez la mise en cache de vos onglets, alors cette solution est probablement mieux adaptée, elle ne montre le chargement ajax que si le contenu n'est pas déjà sur la page.

$(".tabs").tabs({
   cache:true,
   load: function (e, ui) {
     $(ui.panel).find(".tab-loading").remove();
   },
   select: function (e, ui) {
     var $panel = $(ui.panel);

     if ($panel.is(":empty")) {
         $panel.append("<div class='tab-loading'>Loading...</div>")
     }
    }
 })
40
répondu jeroen.verhoest 2010-12-02 09:13:14

j'ai moi-même utilisé une méthode différente. Je voulais que les titres des onglets restent comme ils étaient, et avoir l'information de "chargement" dans l'onglet lui-même.

je L'ai fait il est comme suit:

    $("#matchTabs").tabs({
      spinner: "",
      select: function(event, ui) {
        var tabID = "#ui-tabs-" + (ui.index + 1);
        $(tabID).html("<b>Fetching Data.... Please wait....</b>");
      }
    });

comme l'affiche précédente, j'ai utilisé la méthode spinner pour empêcher les titres des onglets d'être changés. L'sélectionnez l'événement se déclenche lorsqu'un onglet est sélectionné, j'ai donc eu l'ID de l'onglet actuellement sélectionné et ajouté à créer une variable qui fait référence au DIVs dans dont le contenu ajax est chargé par défaut.

Une fois que vous avez L'ID, tout ce que vous avez à faire est de remplacer le HTML dans le DIV avec votre message de chargement. Lorsque L'Ajax sera terminé, il le remplacera à nouveau pour vous avec le contenu réel.

8
répondu Kipper 2010-05-13 12:50:46

Balu, j'ai récemment eu besoin de quelque chose de similaire. Dans mon projet, je voulais que les onglets conservent le titre de l'onglet, mais ajouter une animation de type ajax-loading. Voici ce que j'ai utilisé:

$(".tabs").tabs({ spinner: '',
                select: function(event, ui) { 
                    $(".tabs li a .loader").remove();
                    $(".tabs li a").eq(ui.index).append("<span class='loader'><img src='images/ajax-loader.gif'/></span>"); 
                    },
                load: function(event, ui) { $(".tabs li a").eq(ui.index).find(".loader").remove(); }
                });

l'option" spinner "supprime le chargement"..."effet sur, cliquez sur l'onglet. L'événement "select" nous permet d'obtenir l'onglet sélectionné et d'ajouter une nouvelle portée contenant l'animation. Une fois le contenu chargé, nous utilisons l'événement "load" pour supprimer l'animation. Pour éviter des clics d'utilisateur multiples de en détruisant les onglets, nous supprimons() toutes les animations sur n'importe quel onglet sélectionné.

Avez-vous déjà résoudre ce problème? Si c'est le cas, veuillez partager la solution.

5
répondu shanabus 2009-12-18 14:56:09

In jQuery UI v1.12 Vous pouvez utiliser le Handler beforeLoad:

$('#tabs').tabs({                
beforeLoad: function(event, ui) {
    ui.panel.html('Loading')
}
});
3
répondu Andreas Zwerger 2017-04-01 16:45:35