2010-07-30 16 views
1

J'essaie de créer une page FAQ. La page aura 2 colonnes: la première colonne aura une liste de questions, la deuxième colonne aura les réponses. Essentiellement je voudrais cacher la colonne de réponse et quand une question est cliquée, elle apparaîtra. Lorsqu'une autre question est cliquée, la vieille réponse disparaît et la nouvelle réponse apparaît. Donc, je suppose qu'une bascule/Changer d'effet?jQuery Toggle Div Switcher

Voici la structure de ma sortie html de Drupal:

<!-- Question column --> 

<div id="question> 

    <div class="views-row views-row-1"> 
      <div class="question">Question 1 Here!</div> 
    </div> 

    <div class="views-row views-row-2"> 
      <div class="question>Question 2 Here!</div> 
    </div> 

     <div class="views-row views-row-3"> 
      <div class="question>Question 3 Here!</div> 
    </div> 

</div> 


<!-- Answer column --> 

<div id="answer> 

    <div class="views-row views-row-1"> 
      <div class="answer">Answer 1 Here!</div> 
    </div> 

    <div class="views-row views-row-2"> 
      <div class="answer>Answer 2 Here!</div> 
    </div> 

     <div class="views-row views-row-3"> 
      <div class="answer>Answer 3 Here!</div> 
    </div> 

</div> 

est maintenant ici ce que je réussi à faire jusqu'à présent. J'ai réussi à activer/désactiver la première question avec un effet de fondu animé. Quand il s'agit de cacher d'autres divs pour montrer une nouvelle div, je suis perdu. Pourriez-vous m'aider à modifier mon plugin jQuery?

 jQuery.fn.fadeToggle = function(speed, easing, callback) { 

     return this.animate({opacity: 'toggle'}, speed, easing, callback); 

     }; 



$(document).ready(function() { 

    $("#answer .views-row").hide(); 

    $("#question .views-row-1").click(function(){ 

    $("#answer .views-row-1").fadeToggle("slow"); 

    }); 

    }); 

Très apprécié pour toute aide! À la vôtre.

Répondre

0

Je pense c'est ce que vous êtes après:

jQuery.fn.fadeToggle = function(speed, easing, callback) { 
    return this.animate({opacity: 'toggle'}, speed, easing, callback); 
}; 
$(function() { 
    $("#answer .views-row").hide(); 
    $("#question .views-row").click(function(){ 
     var i = $(this).index(); 
     $("#answer .views-row").eq(i).fadeToggle("slow").siblings().fadeOut(); 
    }); 
}); 

You can give it a try here, ce que nous faisons ici est d'obtenir la .index() du <div> vous avez cliqué dessus et en montrant le <div> correspondant à cet index ci-dessous (en utilisant .eq()). Le .siblings().fadeOut() est juste une supposition, qui cache la réponse précédente de sorte qu'un seul à la fois montre, si vous voulez montrer n'importe quel nombre à la fois, il suffit de supprimer cette partie.

+0

Salut Nick, Merci pour votre réponse rapide! Votre exemple fait exactement ce que je veux. Et avec une touche de CSS ce serait parfait. Mais je n'arrive pas à le faire fonctionner. Je pense que c'est parce que j'ai simplifié le html un peu qui bousille en obtenant l'index de la div. Laissez-moi vous donner un lien de la page ma FAQ: http://gemini-lights.com/new/support À votre santé! –

+0

@Chris - Quelque chose dans votre HTML fait '.index()' va complètement perdu, essayant toujours de comprendre quoi, en copiant l'ensemble de '.content' ça fonctionne bien: http://jsfiddle.net/nick_craver/Zzy6N/ 1/ –

+0

@Chris - Ah vous utilisez une version très ancienne de jQuery dans cette page, 1.2.6, une chance de mettre à niveau?, La dernière en 1.4.2. –