2010-06-05 3 views
5

J'ai ce plugin jQuery ajax navigation onglet que j'ai créé en utilisant l'aide de CSS-Tricks.com et le plugin jQuery hashchange event (détecte les changements de hachage dans les navigateurs qui ne ne le supporte pas).

Le code est peu de temps pour poster ici, mais il va quelque chose comme ceci:

Partie 1) Lorsqu'un onglet est cliqué, il obtient l'attribut href de cet onglet et l'ajouter à la barre des navigateurs de navigation comme « #tab_name »: window.location.hash = $(this).attr("href");

Partie 2) Lorsque les modifications de la barre de navigation (changement de hachage), il obtient le changement href comme ceci: window.location.hash.substring(1); (sous-chaîne est d'obtenir que « TAB_NAME » sans « # »), puis appelez la fonction ajax pour obtenir l'information à afficher.

Je veux déclencher automatiquement le plug-in pour charger le premier onglet lorsque la page est accessible, donc au début du code, je mets:

if (window.location.hash === '') { // If no '#' is in the browser navigation bar 
    window.location.hash = '#tab_1'; // Add #tab_1 to the navigation bar 
    $(window).trigger('hashchange'); // Trigger a hashchange so 'Part 2' of the plugin calls the ajax function using the '#tab_1' added 
} 

Le probles est que cela fonctionne dans FF, mais pas Chrome, je veux dire, tout fonctionne mais il semble que le $(window).trigger('hashchange'); ne fonctionne pas parce qu'il ne reçoit pas le premier onglet ..

Des suggestions ??

Remarque: Cela a fonctionné il y a quelques temps mais tout à coup, ce n'est pas le cas (peut-être la mise à jour de Chrome).

Répondre

2

Je suspecte que vous essayez de déclencher l'événement d'une manière dont le navigateur n'est pas satisfait. Où est défini votre gestionnaire pour "hashchange"? Je suggère que vous essayez de lier à

$('body').bind('hashchange', function() { ... }) 

au lieu de "fenêtre". Même cela pourrait vous donner des problèmes dans les navigateurs WebKit; Si c'est le cas, vous pouvez créer un <div> pour envelopper le contenu de votre corps et vous lier à celui-ci.

+0

Eh bien, le hashchange est défini comme ceci: $ (window) .bind ('hashchange', function() {... – Jonathan

+3

J'ai trouvé le problème, j'appelait $ (window) .trigger ('hashchange') Avant que le hashcnage ne soit défini dans $ (window) .bind ('hashchange', function() {... Merci de m'indiquer la direction! – Jonathan

Questions connexes