Liste déroulante liée

Résolu/Fermé
gif50 Messages postés 29 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 5 juillet 2012 - 30 sept. 2009 à 17:12
gif50 Messages postés 29 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 5 juillet 2012 - 2 oct. 2009 à 14:32
Bonjour,
Dans un fichier php, j'ai 2 listes déroulantes, renseignées par une requête mysql, qui contiennent les mêmes données .
La première qui concerne le titulaire et la seconde qui concerne le suppléant.

Je voudrais que lorsque je choisis un titulaire dans la première liste, il n'apparaisse pas dans la seconde, la même personne ne pouvant être à la fois titulaire et suppléant.

Merci d'avance pour votre aide.

Gif50

8 réponses

Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
30 sept. 2009 à 17:37
tu dois pouvoir faire ça en javascript

onChange sur la premiere liste va appeler une fonction JS qui va supprimer l'entree correspondante dans la deuxieme

vas voir sur G ou sur ce forum
Javascript supprimer une option de liste deroulante

mais fais gaffe car si l'utilisateur change son choix dans la liste une ça va en supprimer un a chaque fois

dans ce cas le mieux serait que ça mettre disabled dans l'option concernée, le nom apparaitra mais ne pourra pas être sélectionné
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
30 sept. 2009 à 18:04
je crois que ma deuxième solution n'est pas possible, mais pour la première vas voir ce site:

http://fr.selfhtml.org/javascript/objets/options.htm#effacer_elements
0
gif50 Messages postés 29 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 5 juillet 2012
1 oct. 2009 à 11:20
Bonjour Alain_42,

Tout d'abord merci pour ta réponse.
Elle m'a permis de trouver une solution pour supprimer dans la liste2 l'élément choisi dans la liste1.
Mais comme tu l'indiques si l'utilisateur change l'élément de la liste1, on supprime à nouveau un élément de la liste2 mais sans retrouver le tout premier élément choisi.
Il faudrait je pense d'abord recopier la liste1 dans la liste2 et ensuite supprimer le nouvel élément choisi de la liste1, par contre je ne sais pas comment faire ça.
Si quelqu'un a une idée elle est la bienvenue.

Cordialement,
Gif50
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
1 oct. 2009 à 11:53
J'ai fais depuis une recherche un peu plus approfondie http://www.aliasdmc.fr/balise/zone_html_option.html il est possible de mettre disabled=true dans la balise option, donc de modifier ça par javascript

ça résoudrait ton pb car il suffit de parcourir toutes les <option> de la liste 2 et de mettre disabled=false pour tous sauf celle selectionnée liste1 que tu mettrait disabled=true
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gif50 Messages postés 29 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 5 juillet 2012
1 oct. 2009 à 14:35
Merci Alain pour ta réponse, mais la fonction "disabled" permet effectivement de ne plus pouvoir sélectionner l'élément, en revanche il n'est pas possible de le remettre "enabled" car "disabled = false" ne fonctionne pas.
Je suis entrain de tester une solution ajax qui utilise le système des listes déroulantes liées.

Cordialement,
Gif50
0
gif50 Messages postés 29 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 5 juillet 2012
1 oct. 2009 à 16:42
J'ai trouvé la solution dont voici le code javascript :

function go(){
//Je récupère l'indice selectionné dans la liste1
var indice=document.form.liste1.selectedIndex;
//Je calcule le longueur de la liste1
var long=document.form.liste1.length;
//Je supprime l'attribut 'disabled' des tous les éléments de la liste2
for (i=0; i<long; i++) {
document.form.liste2.options[i].removeAttribute("disabled");
}
//Je 'disabled' l'element selectionné de la liste1 dans la liste2 pour ne pas pouvoir le selectionné
document.jeune.liste2.options[indice].disabled = true;
}

Merci à Alain_42 pour m'avoir mis sur la piste.

Cordialement,
Gif50
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
1 oct. 2009 à 17:32
Bravo !

Cordialement

@lain
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
1 oct. 2009 à 17:41
par contre attention tu as utilisé" long" comme nom de variable, apparemment c'est un mot réservé javascript
mais ça n'a pas l'air de gêner ?
0
gif50 Messages postés 29 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 5 juillet 2012
2 oct. 2009 à 14:32
Merci Alain_42,
Je n'ai pas vu de problème avec le mot "long" mais pour eviter tout problème je l'ai remplacer par "nb".

Cordialement,
Gif50
0