[JS] Question basique de fonctions...

Question basique de fonctions... [JS] - HTML/CSS - Programmation

Marsh Posté le 20-01-2009 à 18:17:37    

Bonjour,
 
Je cherche à ce que tous les champs d'un formulaire soient grisées, mais que, en cas de clic dans la checkbox associée, le champ en question soit accessible. J'ai trouvé un truc qui fonctionne bien, que voici :
 
<script language="javascript">
function activer()
{
    if (window.document.etape3.presence_acteurs.checked==true)  {
      window.document.etape3.nombre_acteurs.disabled=false;
   }else{
      window.document.etape3.nombre_acteurs.disabled=true;
   }
}
</script>
 
et, le formulaire correspondant :
 
<form action="" method"post" name="etape3">
 
<input type="checkbox" value="acteurs_presents" name="presence_acteurs" onClick="activer()" />Test
<input type="text" name="nombre_acteurs" disabled/>
</form>
 
Alors, ça, ça marche bien, mais voilà, je voudrais passer en paramètre à la fonction activer, le nom du champ et de la checkbox auquels elle s'applique, pour pouvoir l'utiliser sur plusieurs lignes de formulaire différentes...
J'ai essayé de bidouiller deux trois trucs, mais sans succès. Ca n'a pas l'air compliqué, mais... j'arrive pô :(
 
donc je fais appel à votre aide ;)

Reply

Marsh Posté le 20-01-2009 à 18:17:37   

Reply

Marsh Posté le 20-01-2009 à 18:58:37    

activer(this);
 
Accessoirement, je suggérerais fortement:

  • De ne pas passer par window.document.etape3.presence_acteurs, c'est pas très propre, préférer passer par getElementsById et autres vrais sélecteurs DOM
  • De passer par de vrais handlers d'évènements (générés sur onload/ondomready) plutôt que de coller le JS inline dans tes balises HTML
  • c'est script type="text/javascript", pas script language="javascript"
  • Dans une condition, pas besoin de ==true, c'est redondant
  • Se renseigner sur le concept de progressive enhancements: avec ton truc, si une personne arrive avec le JS désactivé (navigateur ne supportant pas, configuré pour ne pas exécuter le JS, ou extension NoScript sur Firefox) elle ne peut pas utiliser l'input... [:petrus75]
  • Enfin choisir entre HTML et XHTML, parce que disabled sans valeur derrière c'est du HTML, ferme un tag avec /> c'en est pas.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-01-2009 à 19:25:38    

Houlala... je vais essayer de traduire ce que tu me dis, pis je vais tester. Donc je fais :
 
<script type="text/javascript">
function activer(case_coche,champ_input)
{
    if ( document.getElementById("case_coche" ).checked)  {
       document.getElementById("champ_input" ).disabled=false;
   }else{
       document.getElementById("champ_input" ).disabled=true;
   }
}
</script>  
 
<form action="" method"post" name="etape3">
 
<input type="checkbox" value="acteurs_presents" name="presence_acteurs" onClick="activer(this,nombre_acteurs)" />Test
<input type="text" name="nombre_acteurs" disabled="disabled"/>
</form>  
 
 
mais ça marche po, mon champ reste grisé...
(j'ai tenté d'appliquer les points 1,3,4,6. pour le 2, pas compris et le 5, le problème ne se pose pas dans mon cas)
 
 
EDIT :
 
ça, ça marche :

<script type="text/javascript">
function activer()
{
    if (window.document.getElementById("presence_acteurs" ).checked)  {
      window.document.getElementById("nombre_acteurs" ).disabled=false;
   }else{
      window.document.getElementById("nombre_acteurs" ).disabled=true;
   }
}
</script>  
</head>
<body>
 
<form action="" method"post" name="etape3">
 
<input type="checkbox" value="acteurs_presents" name="presence_acteurs" onClick="activer()" id="presence_acteurs"/>Test
<input type="text" name="nombre_acteurs" disabled="disabled" id="nombre_acteurs"/>
</form>  


 
mais toujours impossible de passer mes deux id en variable...
 
 
EDIT : bon, finalement j'ai réussi à faire qqch qui fonctionne :

<script type="text/javascript">
function activer(ca,ch)
{
    if (window.document.getElementById(ca ).checked)  {
      window.document.getElementById(ch ).disabled=false;
   }else{
      window.document.getElementById(ch ).disabled=true;
   }
}
</script>  
</head>
<body>
 
<form action="" method"post" name="etape3">
 
<input type="checkbox" value="pr" name="pr" onClick="activer('pr','se')" id="pr"/>Test
<input type="text" name="se" disabled="disabled" id="se"/><br/><br/>
 
<input type="checkbox" value="dawa" name="dawa" onClick="activer('dawa','yoplait')" id="dawa"/>Test
<input type="text" name="yoplait" disabled="disabled" id="yoplait"/>
</form>


 
merci bien à toi :)


Message édité par bastien71000 le 20-01-2009 à 19:41:32
Reply

Marsh Posté le 20-01-2009 à 22:09:25    

[:prozac]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-01-2009 à 18:45:31    

?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed