Page 1 sur 1

[Résolu] SELECT, option choisie: activer un champs texte

Posté : 29 sept. 2005, 16:42
par jckfun
Bonjour tout le monde !

Voila, j'ai qq soucis en JS. Je voudrais implémenter un script pour lequel, lorsque l'utilisateur choisi une certaine option d'une liste, un champs texte apparait a coté.

Par exemple, lorsque l'utilisateur doit choisir une catégorie, si il clique sur "Nouvelle Categorie", un champs texte apparait a coté pour qu il entre cette catégorie.

Voila mon code qui ne marche pas.

Code : Tout sélectionner

function actdesact() { if (document.getElementById('category').options[document.getElementById('category').selectedIndex].value =! "new") document.modifmultischedule.category_new.disabled=true; else document.modifmultischedule.category_new.disabled=false; }
et pour la LIST :

Code : Tout sélectionner

<select name="category" onChange='javascript:actdesact()'> <? $tableau_propre = array_wo_duplicate_values ("category"); foreach ($tableau_propre as $categories_ok){ ?> <option value="<? print "$categories_ok"; ?> "> <? print "$categories_ok"; ?> </option> <? } ?> <option value="new"> >-- Nouvelle --< </option> </select>
Cela ne marche pas ... Une idée ?

Merci d'avance.

A bientot

Posté : 29 sept. 2005, 16:57
par Truc
Salut, deja pour pouvoir utiliser getElementById('category') correctement il faut inclure un id="category" dans la balise select.
Peut etre que ça arrabgera deja la chose :wink:

Posté : 29 sept. 2005, 17:02
par jckfun
Merci pour la remarque.

Cela ne change rien.

A bientot

Posté : 29 sept. 2005, 17:23
par Truc
tu ne fait pas de qu'il faut pour y arriver :wink:

javascript:
function actdesact()
   {
       if (document.getElementById('category').options[document.getElementById('category').selectedIndex].value != "new")
           document.modifmultischedule.category_new.disabled=true;
       else
           document.modifmultischedule.category_new.disabled=false;
   }
Remarque: on note != et non =!

pour l'appel a la fonction javacript essai plustot comme ceci:
onChange='actdesact(this)'
j'ai testé chez moi et ça marche tres bien, courage :wink:

Posté : 29 sept. 2005, 17:49
par jckfun
Merci Truc pour ta réponse.

J'ai fait les modifs, et ca ne marche toujours pas ...

Je ne comprends pas !

Pourrais tu me mettre ton code sur une page pour que je vois en effet que ca marche, car la, c est un peu enervant :oops:

A bientot et merci d'avance

Posté : 29 sept. 2005, 18:00
par Truc
voila le code, tel que je l'ai:

je suis sur que tu n'a qu'un simple oubli :wink:
<html>
<head>
<title>Document sans nom</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">

function actdesact()
   {
       if (document.getElementById('category').options[document.getElementById('category').selectedIndex].value != "new")
           document.modifmultischedule.category_new.disabled=true;
       else
           document.modifmultischedule.category_new.disabled=false;
   }  

</script>
</head>
<body>
<form method="get" action="ma_page.html" name="modifmultischedule">   

   <input type="text" name="category_new" disabled>
   <select name="category" id="category" onChange='actdesact(this)'>
		<option value="1"> 1 </option>
		<option value="2"> 2 </option>
		<option value="3"> 3 </option>
       <option value="new"> >-- Nouvelle --< </option>
    </select>
</form>
</body>
</html> 
En principe c'est pas bien de balancer un code comme ca mais si tu veut des explications, demandes :wink:

Posté : 29 sept. 2005, 19:39
par Invité
Merci pour ce code, enfin, je ne vois pas de difference notable avec le mien ...

Je teste ca demain, et je te dis quoi.

Merci beaucoup en tout cas !!!

Bonne soirée.

Posté : 29 sept. 2005, 22:07
par gesualda
Bonjour truc,

j'ai suivi le post, qui m'a l'air interressant. Je suis un peu dans le meme cas de figure que "jckfun", et ton bout de code rend m'a rendu bien service, ne connaissant rien au javascript.

Mais j'ai deux questions, bien sur si tu as le temps.

- Peut on utiliser le meme code javascript pour faire apparaitre la balise input avec un display=none, en place de l'activité? j'ai essayé je trouve pas. :oops:

- Est on obliger de passer par du javascript pour ce genre de chose, ou bien peut on le faire entièrement en php ?

Merci :roll:

Ca marche !

Posté : 30 sept. 2005, 11:49
par jckfun2
Truc,

Merci d'avoir consacré du temps à la résolution de mon probleme.

EN fait, j'avais oublié de mettre "disbled" en propriété de l'INPUT.

Un peu stupide que je suis ...

Sinon, la remarque de gesualda me semble etre tres interessante. Cela pourrait etre une amelioration de ce que je veux faire.

Est ce possible de masquer l INPUT et non le désactiver ?

A bientot.

Posté : 30 sept. 2005, 14:07
par Invité
En cherchant un petit peu,

J'ai trouvé la solution:
function actdesact() 
   { 
       if (document.getElementById('category').options[document.getElementById('category').selectedIndex].value != "new"){
			        document.getElementById('category_new').style.display = "none";
			        document.getElementById('category_new').style.visibility = "hidden";
			        document.forms["modifmultischedule"].elements["category_new"].value = "";
			 }
       else {
			        document.getElementById('category_new').style.display = "";
			        document.getElementById('category_new').style.visibility = "visible";
			 }
   }
et pour mon input text:
<input type="text" name="category_new" id="category_new" style="display: none" maxlength="50" />
En esperant que ca puisse aider quelqu un

A bientot

Posté : 30 sept. 2005, 14:10
par Cyrano
Excellent, il manque plus que le [Résolu] ;)