Petit coup de main Javascript (à priori simple)

WRInaute accro
Voila j'utilise ce ceci (déjà fourni par un wrinaute ici ... je ne sais plus qui, qu'il me pardonne) .

Un script :

Code:
<script> 
var zones = ["zonea","zoneb","zonec"];
function deployer(identifier)
{
      for ( var i in zones)
      {
            if (zones[i] != identifier)
            {
                   document.getElementById(zones[i]).style.display="none";
            }
            else
            {
                   document.getElementById(zones[i]).style.display="block";
            }
      }
}
</script>

et ensuite dans mon code :

Code:
<a onclick="deployer('zonea')" style="cursor:pointer">A</a><br>
<div id="zonea" style="display:none">
		aaaaaaaaaaa<br>
		aaaaaaaaaaaa<br>
</div>
     					     					
 <a onclick="deployer('zoneb')" style="cursor:pointer">B</a><br>
 <div id="zoneb" style="display:none">
		bbbbbb<br>
		bbbbbbbbbbb<br>
</div>

 <a onclick="deployer('zonec')" style="cursor:pointer">C</a><br>
 <div id="zonec" style="display:none">
		cccccccccc<br>
		ccccccccccc<br>
</div>

Ca marche impec. Le clic sur chaque lettre deploie la zone correspondante en fermant l'ancienne zone déployée.

Seul probleme, j'y connais rien en JS et me manque un script qui ferait un tout deployer/tout refermer en alternance ... (appliqué sur var zones). Si un JS codeur traine ... Merci d'avance
 
WRInaute accro
arf en relisant le code , meme sans connaitre js, je me dit que :

Code:
<script> 
var zones = ["zonea","zoneb","zonec"];
function toutdeployer(identifier)
{
      for ( var i in zones)
      {
                  document.getElementById(zones[i]).style.display="block";
      }
}
</script>

et

Code:
<script> 
var zones = ["zonea","zoneb","zonec"];
function toutcontracter(identifier)
{
      for ( var i in zones)
      {
                   document.getElementById(zones[i]).style.display="none";
      }
}
</script>

ca doit le faire ... ? Un JS codeur peut confirmer ? Arf oui sauf que je veux qu'une fonction qui deployetout/contractetout en alternance ... :roll:
 
WRInaute occasionnel
Ca devrait le faire :

Code:
<script>
var zones = ["zonea","zoneb","zonec"];
function deployer()
{
      var visibility = (document.getElementById("zonea").style.display !== "block") ? "block" : "none";
      for ( var i in zones)  {
            document.getElementById(zones[i]).style.display = visibility;
      }
}
</script>
 
WRInaute accro
heu je dois je suppose la renommer toutdeployertoutcontracter ? qu'elle se bouscule pas avec l'autre ... :?: Par contre je vois pas de none dans le script ? manque pas un truc ? Je uspect un des deux blocks :wink:
 
WRInaute accro
Finalement c'ets enpalce et ca marche ... Merci mrPringle :wink:

J'ai juste changé le nom de la fonction.
 
WRInaute accro
Si j'osais abuser mrPringle ...

Mon premier script permet d'avoir 3 zones et le clic sur une lettre deploie la zone correspondante et replie toutes les autres : tres bien ...

Sauf que ca serait encore plus que "tres bien" si un nouveau clic sur la lettre refermait la zone ... faut rajouter quoi ou ? :wink:

PS : Grrr va vraiment falloir que je me mette aussi au JS !
 
WRInaute occasionnel
Oui faut t'y mettre, JS c'est sympa une fois passées les premières interminables sessions de debuggage. :)
Ca devrait faire ce que tu souhaites :

Code:
function deployer(identifier)
{
      if (document.getElementById(identifier).style.display === 'block') {
            document.getElementById(identifier).style.display="none";
      }
      for ( var i in zones) {
            if (zones[i] !== identifier)  {
                   document.getElementById(zones[i]).style.display="none";
            }
      }
}

PS. Si tu ajoutes pas mal de JS sur ton site, tu devrais voir à utiliser une librairie comme jQuery.
 
WRInaute accro
Bon testé ... marche pas. le nouveau scipt ne fait plus rien de visible (ni deployer non contracté). j'ai remis l'ancien pour le moment
 
WRInaute occasionnel
C'est sur je viens de relire, je devais être fatigué... :)

Code:
function deployer(identifier)
{
      var i, elem = document.getElementById(identifier);
      elem.style.display = (elem.style.display === 'block') ? 'none' : 'block';
      for (i in zones) {
            if (zones[i] !== identifier)  {
                   document.getElementById(zones[i]).style.display = 'none';
            }
      }
}

En gros la première ligne (après les déclarations de variables) affiche le bloc demandé ou le masque si c'est déjà le cas et la boucle masque tous les autres ensuite.
 
WRInaute accro
ouai oaui ... tu voulais voir si je suivais :mrgreen: :mrgreen: Ben t'as vu, je suis pas :mrgreen: Bon je va retester
 
WRInaute discret
toute façon ils annoncent de la pluie pour 6 mois par chez toi, tu vas avoir le temps de lire la doc jquery :p
 
WRInaute accro
:mrgreen: :mrgreen:

Déjà avoir 6 jours de pluie :roll: J'ai pas compté mais je suis pas sûr qu'on les ai eu l hiver dernier :wink:
 
Discussions similaires
Haut