Suite à une question de Modus sur dream-forum concernant la fonction que j'avais mise sur ce blog il y a quelque temps pour lier les listes de formulaire, voici une petite mise à jour de la fonction qui reprend également les remarques faites par Jep dans les commentaires du premier billet.
Lorsque l'on sélectionne un élément dans une liste, la liste suivante s'affiche bien mais pas les sous listes associées. Il faut pour cela choisir une autre option et revenir à l'option présélectionnée pour que la liste apparaisse.
De même lorsque la page s'ouvre, la liste correspondant à la première option n'est pas présente.
Il faut premièrement modifier la fonction en testant si la première option de la liste générée a elle aussi une liste associée et dans ce cas, relancer la fonction pour la faire apparaître.
Il faut également lancer la fonction au chargement de la page pour que les listes puissent être tout de suite générées en fonction de la première option sélectionnée.
Ce qui donnera pour la fonction javascript :
function ajout(selection){
nb_select = selection.parentNode.getElementsByTagName("select").length;
if ( selection == selection.parentNode.getElementsByTagName("select")[nb_select-1] ) {
element_select = selection;
selection = selection.options[selection.selectedIndex].value;
if ( list_choix[selection] ) {
new_liste = document.createElement("select");
element_select.parentNode.appendChild(new_liste);
new_liste.setAttribute("id", "choix"+nb_select);
new_liste.setAttribute("name", "choix"+nb_select);
new_liste.onchange= function () {ajout(this) };
for (var i=0; i<list_choix[selection].length; i++) {
new_option = document.createElement("option");
new_liste.appendChild(new_option);
new_option.setAttribute("value", list_choix[selection][i]);
new_option.text = list_choix[selection][i];
}
}
}
else {
selection.parentNode.removeChild(selection.nextSibling);
ajout(selection);
}
if (list_choix[new_liste.options[0].value]) {
ajout(new_liste)
}
}
Et pour la modification du code html :
<body onload="ajout(document.getElementById('choix0'))">
<form action="">
<fieldset>
<select name="choix0" id="choix0" onchange="ajout(this)">
<option value="amstramgram">amstramgram</option>
<option value="pifpafpoum">pifpafpoum</option>
<option value="tictac">tictac</option>
</select>
</fieldset>
<p><input type="submit" value="envoyer" /></p>
</form>
</body>
voir la page d'exemple
Très instructif, merci nanoum
Cool. Vachement instructif
Thx bcp
(Ok, ok, merci beaucoup... je sors
)
Pas mal du tout Nanoum, comme de bien entendu !!!
Ah voilà quelque chose dont je vais me servir dès maintenant !
Merci beaucoup
Vraiment super, je cherchais ce truc depuis quelques jours.
Excelent, cela fait partie des petits détails qui donnnent une ergonomie optimale !
super ! Genial !
Très bon script qui marche au poil. Merci bien.
C'est génial ce script mais il serait bien de pouvoir charger les listes à partir d'une base de donnée SQL par exemple.
@laura : ce n'est pas incompatible, toutes les données sont stockées dans des tableaux javascript, tu peux générer ses tableaux en php en puisant les infos dans une bdd
Je développe en asp et je débute en javascript alors j'ai un peu de mal à intégrer l'un dans l'autre. Si tu as un exemple à me donner pour charger une liste cela m'aiderais beaucoup. Merci encore pour ton script.
je ne connais pas trop asp mais plutot php
avec l'un ou l'autre, tu peux générer du code html
rien ne t'empèche de générer également du javascript de la même manière (avec response.write je crois ?) tu places dans ce cas le code asp non pas dans le body mais entre les balises script par exemple
pour les questions de ce type, je t'invite à aller demander de l'aide sur http://dreamweaver.media-box.net qui sera plus adapté qu'ici
Ok, merci encore.
Denière petite question pour bien comprendre, list_choix c'est quoi comme variable, un tableau ?
oui, c'est un tableau javascript
Bonjour,
Ca fonctionne bien, mais j'ai une question concernant le 3e champ (sous-sous-menu) : comment affecter un lien renvoyant à une page en cliquant sur ENVOYER ? Ou alors, est-ce possible de creer un lien directement en passant sur la sélection choisie ? (je sais pas si c'est super clair...)
D'avance merci
Super bien expliqué merci beaucoup...par contre j'ai un soucis
... les premières ligne (select) ne sont pas "instantanée" (mais je vais essayer d'arranger ça)
comme définir les options de fieldset dans dreamweaver MX
Bonjour,
Question de débutant : comment faire à partir de ton code pour que la liste de sous-niveau apparaisse en dessous de la première et pas à sa droite ?
Merci d'avance pour votre patience.
Commentaires momentanément fermés. Merci de votre compréhension.