2011-07-14 5 views
2

J'ai une liste de liste qui utilise jquery toggle et slideToggle pour que lorsque vous cliquez sur des éléments, le texte explicatif glisse et la classe change sur le h3. Le code HTML pour les éléments ressemble:Utiliser location.hash pour activer jquery toggle/slideToggle

<li><h3><a href="#" target="_blank" id="feature1" name="feature1">What do I know about javascript?</a></h3> 
<div class="check_list_wrap feature1">Not a lot, apparently.</div> 
</li> 

J'ai inclus les fichiers jquery puis écrire ceci dans l'en-tête:

<script type="text/javascript"> 
    $(function() { 
    $("#listfeatures h3 a").toggle(function(){ 
     $(this).addClass("check_list_selected"); 
    }, function() { 
     $(this).removeClass("check_list_selected"); 
    }); 
     $("#listfeatures h3 a").click(function() { 
      $("."+this.id).slideToggle('fast'); 
       return false; 
     }); 
    });  
</script> 

Cela fait en sorte que si un lien est cliqué, il basculera le changement de classe de l'h3, l'affichage: bloc/affichage: inline et le glissement hors de la div. Ça fonctionne bien. MAIS, maintenant je le veux pour que, avec une URL comme index.php # feature1, le basculement de cet élément de liste soit activé comme si on avait cliqué dessus. Je sais que je dois utiliser location.hash mais je ne suis pas sûr de savoir comment faire ça. Où devrais-je commencer?

+0

Je suis sûr que vous devez répondre à l'événement 'onload' afin que les nouveaux clics enregistrent quelque chose pour que votre script réponde. L'astuce est que la page ne recharge pas vraiment, mais vous obtenez toujours l'événement. – ErikE

Répondre

1

location.hash contient tout ce qui se trouve dans l'URL, y compris et après la marque de hachage (#). Donc, si allé à index.php # feature1 et je voulais le div id « feature1 » pour afficher la charge, vous pouvez faire

$(document).ready(function() { 
    if(location.hash) { 
     var id = location.hash.slice(1); //Get rid of the # mark 
     var elementToShow = $("#" + id); //Save local reference 
     if(elementToShow.length) {     //Check if the element exists 
      elementToShow.slideToggle('fast');  //Show the element 
      elementToShow.addClass("check_list_selected"); //Add class to element (the link) 
     } 
    } 
}); 
+0

cela fonctionne bien, sauf que la classe sur le h3 n'a pas changé. Comment puis je faire ça? –

+0

Il suffit d'ajouter '$ (". "+ Id) .addClass (" check_list_selected ");' dans le corps du if. Je vais éditer la réponse. –

+0

Cela change la classe sur check_list_wrap, j'essaye de changer la classe sur le h3 au dessus de –

Questions connexes