[Formulaire] Afficher un champ par <SELECT>

Résolu
Utilisateur anonyme -  
 irishcofee -
Bonjour !

J'ai besoin de votre aide car j'ai un petit problème ;

- Sur mon (Futur) site internet, je voudrai créer une page pour déclarer des bugs présents sur tout le site, grâce à un formulaire qui m'avertirait par e-mail. Pour la question "Quel est le type du bug ?", j'ai opté pour une balise de liste déroutante (<SELECT></SELECT>); Et si le type du bug n'apparaît pas dans les choix proposés, je voudrais que quand le visiteur clique sur "Autre type de bug", un champ apparaisse en dessous en demandant d'y taper le genre du bug, MAIS SEULEMENT SUR AUTRE ! Voici mon code ;

<SCRIPT>
function afficheautre
{
if (bug.défaillance.value == "autre")
bug.typedebug..style.display = "";
else
bug.typedebug..style.display = "none";
}
window.onload = afficheautre
</SCRIPT>

<FORM name="bug">
<SELECT name="défaillance">
<OPTION VALUE="faute">Faute d'Orthographe</OPTION>
<OPTION VALUE="fonctionnement">Ne fonctionne pas</OPTION>
<OPTION VALUE="lien">Lien mort</OPTION>
<OPTION VALUE="ouverture">Ouverture d'une fenêtre</OPTION>
<OPTION VALUE="chargement">Chargement de la page</OPTION>
<OPTION VALUE="graphisme">Graphisme</OPTION>
<OPTION VALUE="image">Image Manquante</OPTION>
<OPTION VALUE="favoris">Lien de favoris nul</OPTION>
<OPTION VALUE="recherche">Mots-Clés manquants</OPTION>
<OPTION VALUE="autre">Autre</OPTION>
</SELECT><BR>
<INPUT type="text" name="typedebug" style="display=none">
</FORM>

"typedebug" est bien absent sur la page (Au démarrage), mais il est tout aussi invisible quand on clique sur "autre". Quelqu'un aurait-il une idée pour que cela fonctionne ?
A voir également:

4 réponses

medoc
 
Pour ajouter supprimer un élément quel qu'il soit, ce n'est pas 'visibility : hidden / visible' ,
il faut mieux utiliser 'display: none / bloc'
exemple:

<script type="text/javascript">
//raccourci pour récupérer l'id
function div(id){
return document.getElementById(id);
}
function afficheautre() {
if (document.bug.défaillance.options.value == "autre")
div('typedebug').style.display= 'bloc';
else
div('typedebug').style.display= 'none';
}
</script>

ne pas oublié de rajouter dans les css display:none
3
rems75
 
Salut medoc,

Il est vrai que ta méthode fonctionne mieux, car elle permet de s'affranchir des espace blancs indésirables...
Par contre, 'display: none / bloc' ne me semble pas correct, en effet ce serait plutôt 'display: none / block' ...

En tout cas, ton code se met à marcher chez moi avec cette modif !
Encore merci pour l'entraide !!

Rems
0
coco_83 Messages postés 711 Date d'inscription   Statut Membre Dernière intervention   127
 
Bonjour,

Il existe une autre alternative que se retrouver avec un champ vide : mettre le champ en question dans un span comme ceci:
<span id="champ_autre_bug" style="visibility:hidden"><input type="text" name="typedebug"></span>

puis faire apparaître le span et pas le text via le script.
Si par contre vous souhaitez stocker le résultat dans ue base de données alors là laisser le code tel quel : le champ vide servira.

PS : évitez les accents et espaces dans le code html de la page! Plutôt que <SELECT name="défaillance" OnChange="afficheautre();">, mettre <SELECT name="defaillance" OnChange="afficheautre();">, des fois ca peut aider : les accents font parfois planter.

coco_83
1
Ichitaka
 
Tu peux aussi utiliser les champs cachés comme ceci :

<INPUT type="hidden" name="typedebug" value="ce_dont_tu_as_besoin">
1
irishcofee
 
tres interessant ce post. mais pouvez vous mettre le code complet définitif. celui qui fonctionne. parcequelà pour retrouver le bon code total, c'est chaud.

;)

merci
0
Utilisateur anonyme
 
(Re) Bonjour à tous !!!

Après avoir bossé quelque heures, j'ai ENFIN trouvé la solution a ce problème !!!!!!!

<script language="JavaScript">
function afficheautre() {
if (document.bug.défaillance.options.value == "autre")
document.getElementById('typedebug').style.visibility = 'visible';
else
document.getElementById('typedebug').style.visibility = 'hidden';
}
</script>

<FORM name="bug">
<SELECT name="défaillance" OnChange="afficheautre();">
<OPTION VALUE="faute">Faute d'Orthographe</OPTION>
<OPTION VALUE="fonctionnement">Ne fonctionne pas</OPTION>
<OPTION VALUE="lien">Lien mort</OPTION>
<OPTION VALUE="ouverture">Ouverture d'une fenêtre</OPTION>
<OPTION VALUE="chargement">Chargement de la page</OPTION>
<OPTION VALUE="graphisme">Graphisme</OPTION>
<OPTION VALUE="image">Image Manquante</OPTION>
<OPTION VALUE="favoris">Lien de favoris nul</OPTION>
<OPTION VALUE="recherche">Mots-Clés manquants</OPTION>
<OPTION VALUE="autre">Autre</OPTION>
</SELECT><BR>
<INPUT type="text" name="typedebug" style="visibility=hidden">
</FORM>


Petit inconvégnant néanmoins; ce script ne sert qu'à cacher/afficher "typedebug".=, et non à le faire ajouter/supprimer... En somme, vous aurez un trou dans votre formulaire, celui du champs CACHÉ.
0