2010-08-12 11 views
3

Je souhaite créer un script qui modifie le texte du lien de basculement en fonction de la visibilité des autres éléments. Donc, alors que #form est visible, je veux que le texte # form-container soit "Hide ...", et bien qu'il soit caché, je veux que le texte soit "Show ...".jQuery text() changer sur toggle()?

J'ai essayé cette ligne - if ($ ('# form'). Is (": visible")) {d'une autre manière: if ($ ('# form'). Is (": visible") == "true") {- mais ça ne marche pas non plus.

Qu'est-ce qui ne va pas? Comment changer de texte à chaque fois qu'un autre élément est basculé?

$('.toggle').click(
    function() 
    { 
     $('#form').slideToggle(); 

      if($('#form').is(":visible")){ 
       $('#form-container a').text("Hide form container"); 
      } 
      else { 
       $('#form-container a').text("Show form container"); 
      } 
    }); 

Merci.

Répondre

0

Vous pouvez utiliser la bascule sur l'élément de formulaire.

$("#form").slideToggle(
    function() { 
    //Hide 
    }, 
    function() { 
    //Show 
    } 
); 

source: http://api.jquery.com/toggle/

+0

Merci, n'a pas fonctionné pour moi, mais a utilisé la première solution. – bat

+3

c'est incorrect, il ne peut y avoir qu'une seule fonction de rappel. – bzx

+0

la syntaxe mentionnée est pour basculer, pas pour slidetoggle – hsuk

14

Il sera toujours visible tout en animant, vous pouvez vérifier la visibilité dans le rappel .slideToggle() de sorte qu'il vérifie quand il finitions Animer, comme ceci:

$('.toggle').click(function() { 
    $('#form').slideToggle(function() { 
    $('#form-container a').text(
     $(this).is(':visible') ? "Hide form container" : "Show form container" 
    ); 
    }); 
}); 
+0

Merci, cela fonctionne. Mais pourquoi est-il toujours visible pendant l'animation? Je regarde mon code et il devrait être déjà montré/caché avant si la déclaration? – bat

+2

@bat - Vous appelez le '.slideToggle()' avant la vérification, donc quand il montre * simplement * commencé à être affiché, il est à peine visible, mais il est ': visible'. Quand vous le fermez, il faut du temps pour animer (400ms), donc c'est toujours fermé quand le contrôle est lancé ... dans les deux cas, c'est ': visible', ça a du sens? –