2017-08-24 12 views
-1

J'essaie de faire disparaître une boîte lorsque flag = true ou fadeOut lorsque flag = false. Je récupère les identifiants sur le tableau n.fadeIn fadeOut si flag = true/false

Pourquoi mon drapeau est-il toujours vrai?

function setContentBox() { 
    for (var i = 0; i < jArrayText.length; i++){ 
     var flag = true; 

     if(!flag){ 
      document.getElementById(textWord[i]).onclick = function() { 
       var activeClass = $(this).find('.comment-box'); 
       activeClass.fadeOut(); 
       flag = true; 
      }; 
     }else if(flag){ 
      document.getElementById(textWord[i]).onclick = function() { 
       var activeClass = $(this).find('.comment-box'); 
       activeClass.fadeIn(); 
       flag = false; 
      }; 
     } 
    } 
} 
+3

Quelle est votre question? Est-ce que ça ne marche pas? – abhishekkannojia

+0

Pourquoi drapeau toujours vrai? – zynkn

+0

Quel est votre objectif final réel? Le code ci-dessus ne semble pas faire ce que je suppose que vous voulez, mais sans savoir ce que vous voulez ... –

Répondre

3

Cette ligne:

var flag = true; 

ensembles flag à true au début de chaque itération de la boucle. Vous voudriez le déplacer au-dessus du for.

Mais ce code a d'autres problèmes. Je soupçonne que c'est ce que vous cherchez:

function setContentBox() { 
    // Set flag to true *once* 
    var flag = true; 
    for (var i = 0; i < jArrayText.length; i++){ 
     // Hook the click event 
     document.getElementById(textWord[i]).onclick = function() { 
      var activeClass = $(this).find('.comment-box'); 
      // Use and update the flag 
      if (flag) { 
       activeClass.fadeIn(); 
      } else { 
       activeClass.fadeOut(); 
      } 
      flag = !flag; 
     }; 
    } 
} 

qui utilise les mêmes flag pour tous éléments. Si vous voulez un drapeau pour chaque élément, puis:

function setContentBox() { 
    for (var i = 0; i < jArrayText.length; i++){ 
     // Hook the click event 
     document.getElementById(textWord[i]).onclick = function() { 
      var activeClass = $(this).find('.comment-box'); 
      if (activeClass.data('flag')) {     // `flag` exists and is true 
       activeClass.fadeIn().data('flag', false); // Set `flag` to `false` 
      } else {          // `flag` is false or doesn't exist yet 
       activeClass.fadeOut().data('flag', true);; // Set `flag` to `true` 
      } 
     }; 
    } 
} 

(Note I inversé le sens de flag là.)

Ou, bien sûr, see Martijn's answer si vous n'avez pas réellement besoin flag du tout, juste basculer.

+0

Ceci: 'if (flag) {activeClass.fadeIn(); } else {activeClass.fadeOut();} peut être remplacé par 'activeClass.fadeToggle (flag)' – Martijn

+1

@Martijn: Cela [ne semble pas être documenté] (http://api.jquery.com/fadeToggle/). –

+1

Je suis corrigé. Le toggle fait cela, les toggles animés ne le font pas, était trop tôt pour répondre. La prochaine fois, la recherche avant de parler les enfants, haha ​​ – Martijn

0
function setContentBox() { 
var flag = true; 
      for (var i = 0; i < jArrayText.length; i++){ 


       if(!flag){ 
        document.getElementById(textWord[i]).onclick = function() { 
         var activeClass = $(this).find('.comment-box'); 
         activeClass.fadeOut(); 
         flag = true; 
        }; 
       }else if(flag){ 
        document.getElementById(textWord[i]).onclick = function() { 
         var activeClass = $(this).find('.comment-box'); 
         activeClass.fadeIn(); 
         flag = false; 
        }; 

       } 
      } 
     } 

essayer cette

+0

Pourquoi? Qu'avez-vous changé? Pourquoi l'avez-vous changé? Les vidages de code ne sont pas des réponses * utiles *. –

+0

je change même que vous venez de mettre var flag = true; hors de la boucle –

1

Commander fadeToggle():

function setContentBox() { 
    for (var i = 0; i < jArrayText.length; i++){ 
     document.getElementById(textWord[i]).onclick = function() { 
      $(this).find('.comment-box').fadeToggle(); 
     }; 
    } 
} 

Et cela pourrait être fait encore plus facile:

$(".YourElements").on('click', function(e){ 
    $(this).find('.comment-box').fadeToggle(); 
}); 
+0

Je pensais à 'fadeToggle', alors .... tout a été pris dans les drapeaux. Joli. –

-1

Essayez ceci:

1) fade in/fade out une boîte de commentaire sur clic d'un bouton à condition que le drapeau soit vrai

var flag = true; // if you need fade in and out effect 
    function setContentBox() { 
     for (var i = 0; i < jArrayText.length; i++){ 
       document.getElementById(textWord[i]).onclick = function() { 
        var activeClass = $(this).find('.comment-box'); 
      if(flag){ 
        activeClass.fadeToggle(); // fades in if hidden, fades out if shown     
      } 
       };  
    } 

}

2) fade in/fade out une boîte de commentaire sur un clic de quelque bouton (si elle est fondu caché et s'il est établi fade out) vous n'avez pas besoin d'un drapeau dans le cas si vous voulez pour y parvenir

function setContentBox() { 
     for (var i = 0; i < jArrayText.length; i++){ 
       document.getElementById(textWord[i]).onclick = function() { 
        var activeClass = $(this).find('.comment-box');  
        activeClass.fadeToggle(); // fades in of hidden, fades out if shown 
       };  
    } 
}