Modifier un type d'input si checkbox cochée

VaN
Mammouth du PHP | 1107 Messages

26 févr. 2007, 17:13

Bonjour,

Je souhaiterai pouvoir modifier le type de quelqu'uns de mes inputs, lorsqu'une checkbox est cochée : Initialement, ces champs sont invisibles, donc de type HIDDEN. Lorsque l'utilisateur coche la checkbox, ils deviennent apparents, et de type FILE.

Est ce possible ?

Voilà le script que j'ai pour le moment créer. Il repère bien que la checkbox est cochée ou non, mais je n'arrive pas à modifier le type des inputs :

Code : Tout sélectionner

function show() { if(document.getElementById("multiple").checked == true) { document.getElementById("photo").type = "file"; } } ... <tr> <td>Envoi multiple :</td> <td><input type="checkbox" name="multiple" id="multiple" onchange="javascript:show();" /></td> </tr> <tr> <td></td> <td><input type="text" name="photo" size="40" id="photo" /></td> </tr> <tr> <td></td> <td><input type="text" name="photo" size="40" id="photo" /></td> </tr>
Comment dois-je modifier mon script ?

Sinon, existe t'il une autre solution, comme par exemple, avoir deja des champs FILE à la base, mais invisibles, et les passer apparents lorsque la checkbox est cochée ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 févr. 2007, 19:46

Sinon, existe t'il une autre solution, comme par exemple, avoir deja des champs FILE à la base, mais invisibles, et les passer apparents lorsque la checkbox est cochée ?
tout à fait !
function show()
{
   if(document.getElementById("multiple").checked == true)
   {
      document.getElementById("photo_file").style.display = "";
   }
}

<input type="file" name="photo_file" style="display:none" size="40" id="photo_file" /></td> 
attention un id doit être unique !

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Phil 93
Invité n'ayant pas de compte PHPfrance

26 févr. 2007, 20:09

Sinon, une solution qui fonctionne chez moi, sur Firefox, et + « DOMable » :

monObjetHidden.setAttribute('type', "file") ;

Bien à toi,

Phil

Toujours Phil 93
Invité n'ayant pas de compte PHPfrance

26 févr. 2007, 20:13

Ben non… en fait, ton erreur, elle vient simplement du fait que tu t'adresses à un objet DOM (getElementByID), comme son nom l'indique : « by ID ». Or, ton objet n'a qu'un « name ».

Si tu définis « id="photo" » au lieu de « name="photo" » (ou les deux si tu travailles avec un formulaire), alors aucun problème pour utiliser :

monObjetHidden.type = "file"

Bien à toi,

Phil

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 févr. 2007, 21:43

Ben non… en fait, ton erreur, elle vient simplement du fait que tu t'adresses à un objet DOM (getElementByID), comme son nom l'indique : « by ID ». Or, ton objet n'a qu'un « name ».
justement il en a 2 ayant la même valeur pour l'attribut "id" donc un de trop.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 49 Messages

26 févr. 2007, 21:53

Oui, tu as raison. J'avais lu le code à moitié, donc une moitié de deux, ça m'en faisait qu'1. :D

Et j'avais lu comme j'avais voulu (en fait, j'avais bu — « j'ai bu, j'ai lu, j'ai pas vu » César dixit). Au survol, j'avais même pas vu qu'il avait mis des id… bizarre…

Quoi qu'il en soit, même moi qui ne suis qu'un poète, je ne code pas avec d'aussi grosses moufles… Enfin… ce que j'en dis…

Bien à vous,

Phil