2010-03-31 4 views
8

Les onglets JQuery UI sont implémentés par des ancres nommées dans une liste non ordonnée. Lorsque vous passez la souris sur un des onglets, vous pouvez le voir dans le lien ci-au pied du navigateur:Onglets de l'interface utilisateur JQuery: Comment accéder directement à un onglet à partir d'une autre page?

http://mysite/product/3/#orders 

Au-dessus serait l'onglet « commandes » par exemple. JQuery intercepte le clic sur cette ancre et ouvre l'onglet à la place.

Cependant, si je place un signet sur le lien ci-dessus ou que je le lise depuis un autre endroit du site, la page ne s'ouvre pas sur l'onglet spécifique.

Dans le bloc d'initialisation d'onglets, je pensais mettre du code qui cherche une ancre nommée dans l'URL et, s'il en trouve un, fait une recherche d'index des onglets et appelle le select dessus. Cela signifierait qu'il fonctionnera toujours avec JS éteint.

Mais y a-t-il un moyen plus facile/plus agréable/meilleur?

+0

onglet personnalisé Le contrôle onglet JS ne fonctionnerait pas avec JS tourné de car il est tous js – hunter

+0

Intéressant - 1.3.2. Je voulais améliorer pendant un certain temps, mais je vais par la politique "n'est pas cassé, ne le répare pas". On dirait que j'ai une bonne raison de mettre à jour maintenant (même si je ne suis pas impatient de le retester) –

+0

@Hunter - non les onglets ne fonctionneraient pas mais le comportement serait toujours correct. Si JS était éteint, le lien vous conduirait à la bonne partie de la page. –

Répondre

9

à cet exemple here:

if(document.location.hash!='') { 
    //get the index from URL hash 
    tabSelect = document.location.hash.substr(1,document.location.hash.length); 
    $("#my-tabs").tabs('select',tabSelect-1); 
} 
+0

parfait, je l'ai enveloppé dans une fonction d'aide et l'a appelé de l'événement de chargement du contrôle des onglets, merci –

+1

Une chose que cela ne fait pas est de conserver les informations de hachage entre les onglets. Donc si je suis arrivé de www.page.com # 1 à www.page.com # 2 à partir de la même page, cela ne changera pas l'onglet. –

+0

@Zach - où étiez-vous l'année dernière? – hunter

3

Dans les versions de jQuery UI antérieures à 1.8 (non incluses), c'est à peu près la façon dont vous devriez le faire. L'extension d'onglet (AFAIK) ne sait pas basculer en fonction de l'ancre avec laquelle elle est initialisée (lorsque la page est chargée), vous devez donc faire ce bit manuellement (dans l'événement ready, bien sûr).

Comme l'indique another answer, la nouvelle version des onglets de jQuery UI 1.8 supports bookmarking out of the box.

+0

merci, je voulais juste être sûr que je ne manquais rien d'évident. Doit être une exigence commune –

+0

FWIW la démo qu'ils ont sur le site de l'interface utilisateur jQuery semble s'initialiser correctement à l'ancre. – R0MANARMY

+0

@ R0MANARMY - Je vous suggère d'ajouter une réponse disant "cela fonctionne dans la dernière version". Je pourrais vous marquer puis –

5

de la version 1.8 de jQuery UI prend en charge cette fonctionnalité. Voir par exemple ici:

  1. Second tab active by default
  2. Third tab active by default
+0

merci, parti avec la version stable pour le moment, mais je vais mettre à jour quand je –

+0

BTW jQueryUI 1.8 est la version stable actuelle (voir la section * Qu'en est-il de jQuery UI 1.7? *). http://blog.jqueryui.com/2010/03/jquery-ui-18/ – R0MANARMY

+0

étrange, ils n'ont pas encore mis à jour la page d'accueil: Dernière (1.8: jQuery 1.4+) Stable (1.7.2: jQuery 1.3+) - J'utilise jquery 1.3 aussi, donc je mettrais à jour les deux en même temps. –

0

J'utilise le plugin session pour ce faire dans une classe

Questions connexes