Php forcer listes déroulantes à zéro
Résolu/Fermé
ouafasuin
Messages postés
26
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
19 novembre 2008
-
21 juil. 2008 à 09:24
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 21 juil. 2008 à 16:09
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 21 juil. 2008 à 16:09
A voir également:
- Php forcer listes déroulantes à zéro
- Remettre a zero un pc - Guide
- Forcer demarrage pc - Guide
- Forcer suppression fichier - Guide
- Forcer à quitter windows - Guide
- Listes déroulantes en cascade excel - Guide
3 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
21 juil. 2008 à 11:24
21 juil. 2008 à 11:24
Bonjour,
Forcer une liste à zéro, qu'entends-tu exactement par là ? Remettre la sélection sur la première valeur de la liste ou vider la liste de ses valeurs ?
Faite en sorte que l'utilisateur ne puisse plus sélectionner les valeurs d'une liste n'est pas la même chose, c'est donc une fonctionnalité en plus.
En PHP, tu ne pourra pas faire ce que tu souhaite, du moins ce serait faisable mais barbare et compliqué pour si peu. Je te conseilles donc d'utiliser du javascript pour mettre à jour dynamiquement ces listes.
Admettons que tu ai 4 listes identifiée de la manière suivante :
Et que ces listes ont toutes plusieurs valeurs possible. Si tu souhaite par exemple forcer la sélection sur la première valeur des listes toto2,toto3 et toto4 lorsqu'une valeur est sélectionnée dans toto1, il faut faire comme suit (sans prendre en compte le control sur la valeur sélectionnée dans la liste toto1, je ne mets que le code permettant de forcer la sélection sur la première valeur de la liste) :
Ce code javascript, tu dois le placer là où tu veux que ton control soit effectué (par exemple sur l'évènement "onchange" de la liste 1, comme dans l'exemple complet ci-dessous :
Ton "formulaire" avec 4 listes :
Le code ci-dessus n'a pas été testé donc il est possible que j'ai fait des erreurs de syntaxe, mais ça devrait fonctionner.
Pour ce qui est de vouloir empêcher l'utilisateur de sélectionner une autre valeur dans ces listes, il te faudra modifier la valeur de la propriété CSS 'disabled' = 'true'/'false' de ta liste de sélection là où tu le souhaite, c'est à dire lorsqu'un certaine valeur de la liste 1 est sélectionnée par exemple, alors, non seulement tu force la sélection sur la première valeur dans les autres listes, mais en plus tu interdit de change cette sélection. Par contre il faut bien penser à re-permettre la sélection dans ces autres listes si l'utilisateur change la valeur sélectionnée dans la liste 1.
Exemple :
Bon voilà, en espérant que cela t'ai un peu éclairé sur le sujet.
Forcer une liste à zéro, qu'entends-tu exactement par là ? Remettre la sélection sur la première valeur de la liste ou vider la liste de ses valeurs ?
Faite en sorte que l'utilisateur ne puisse plus sélectionner les valeurs d'une liste n'est pas la même chose, c'est donc une fonctionnalité en plus.
En PHP, tu ne pourra pas faire ce que tu souhaite, du moins ce serait faisable mais barbare et compliqué pour si peu. Je te conseilles donc d'utiliser du javascript pour mettre à jour dynamiquement ces listes.
Admettons que tu ai 4 listes identifiée de la manière suivante :
<select id="toto1">...</select> <select id="toto2">...</select> <select id="toto3">...</select> <select id="toto4">...</select>
Et que ces listes ont toutes plusieurs valeurs possible. Si tu souhaite par exemple forcer la sélection sur la première valeur des listes toto2,toto3 et toto4 lorsqu'une valeur est sélectionnée dans toto1, il faut faire comme suit (sans prendre en compte le control sur la valeur sélectionnée dans la liste toto1, je ne mets que le code permettant de forcer la sélection sur la première valeur de la liste) :
<script language="javascript"> // --- Fonction permettant de sélectionner la première valeur d'une liste passée en paramètre à la fonction function selectFirstValue ( _list_ ){ if ( _list_ != null && _list_.options.length > 0 ) _list_.options[0].selected = "selected"; } // ---- Appel de la fonction sur les trois listes : if ( document.getElementById("toto2") != null ) selectFirstValue(document.getElementById("toto2")); if ( document.getElementById("toto2") != null ) selectFirstValue(document.getElementById("toto3")); if ( document.getElementById("toto2") != null ) selectFirstValue(document.getElementById("toto4")); </script>
Ce code javascript, tu dois le placer là où tu veux que ton control soit effectué (par exemple sur l'évènement "onchange" de la liste 1, comme dans l'exemple complet ci-dessous :
Ton "formulaire" avec 4 listes :
<script language="javascript"> function selectFirstValue ( _list_ ){ if ( _list_ != null && _list_.options.length > 0 ) _list_.options[0].selected = "selected"; } function controlList ( _obj_, _listLabels_ ){ // --- Control value of the list if ( _obj_ != null && _obj_.value == 2 ){ // --- Change selection of the lists represented by it labels var labels = _listLabels_.split(";"); for (var i = 0; i < labels.length; i++) selectFirstValue(document.getElementById(labels[i])); } } </script> <SELECT id="toto1" onchange="controlList(this,'toto2;toto3;toto4')"> <OPTION value="1">val 1</OPTION> <OPTION value="2">val 2</OPTION> <OPTION value="3">val 3</OPTION> </SELECT> <BR> <SELECT id="toto2"> <OPTION value="1">val 1</OPTION> <OPTION value="2">val 2</OPTION> <OPTION value="3">val 3</OPTION> </SELECT> <BR> <SELECT id="toto3"> <OPTION value="1">val 1</OPTION> <OPTION value="2">val 2</OPTION> <OPTION value="3">val 3</OPTION> </SELECT> <BR> <SELECT id="toto4"> <OPTION value="1">val 1</OPTION> <OPTION value="2">val 2</OPTION> <OPTION value="3">val 3</OPTION> </SELECT>
Le code ci-dessus n'a pas été testé donc il est possible que j'ai fait des erreurs de syntaxe, mais ça devrait fonctionner.
Pour ce qui est de vouloir empêcher l'utilisateur de sélectionner une autre valeur dans ces listes, il te faudra modifier la valeur de la propriété CSS 'disabled' = 'true'/'false' de ta liste de sélection là où tu le souhaite, c'est à dire lorsqu'un certaine valeur de la liste 1 est sélectionnée par exemple, alors, non seulement tu force la sélection sur la première valeur dans les autres listes, mais en plus tu interdit de change cette sélection. Par contre il faut bien penser à re-permettre la sélection dans ces autres listes si l'utilisateur change la valeur sélectionnée dans la liste 1.
Exemple :
<script language="javascript"> function selectFirstValue ( _list_ ){ if ( _list_ != null && _list_.options.length > 0 ) _list_.options[0].selected = "selected"; } function enableDisable ( _list_, _disable_ ){ if ( _list_ != null ){ if ( _disable_ ) _list_.style.disabled = 'true'; else _list_.style.disabled = 'false'; } } function controlList ( _obj_, _listLabels_ ){ // --- Control value of the list if ( _obj_ != null && _obj_.value == 2 ){ // --- Change selection of the lists represented by it labels var labels = _listLabels_.split(";"); for (var i = 0; i < labels.length; i++){ // --- For selection selectFirstValue(document.getElementById(labels[i])); // --- Disabled select lists enableDisable(document.getElementById(labels[i]),true); } } else { // --- Enable select lists (in case it is disabled) var labels = _listLabels_.split(";"); for (var i = 0; i < labels.length; i++){ // --- Enable select lists enableDisable(document.getElementById(labels[i]),false); } } } </script> <SELECT id="toto1" onchange="controlList(this,'toto2;toto3;toto4')"> <OPTION value="1">val 1</OPTION> <OPTION value="2">val 2</OPTION> <OPTION value="3">val 3</OPTION> </SELECT> <BR> <SELECT id="toto2"> <OPTION value="1">val 1</OPTION> <OPTION value="2">val 2</OPTION> <OPTION value="3">val 3</OPTION> </SELECT> <BR> <SELECT id="toto3"> <OPTION value="1">val 1</OPTION> <OPTION value="2">val 2</OPTION> <OPTION value="3">val 3</OPTION> </SELECT> <BR> <SELECT id="toto4"> <OPTION value="1">val 1</OPTION> <OPTION value="2">val 2</OPTION> <OPTION value="3">val 3</OPTION> </SELECT>
Bon voilà, en espérant que cela t'ai un peu éclairé sur le sujet.
ouafasuin
Messages postés
26
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
19 novembre 2008
21 juil. 2008 à 15:05
21 juil. 2008 à 15:05
salut kij_82,
OK, j'ai bien compris le principe mais en essayant la fontion function controlList() sur ma première liste, tout ce que j'obtiens c'est une initialisation de la liste1 sur la première valeur mais on peut toujours choisir une autre valeur dans l'unes des trois listes restantes et envoyer la requette, or moi je voudrais que l'utilisateur ne puisse choisir qu' une seule valeur d'une seule liste déroulante, les autres se mettent par defaut à une valeur nulle.
Merci encore pour ton aide!
OK, j'ai bien compris le principe mais en essayant la fontion function controlList() sur ma première liste, tout ce que j'obtiens c'est une initialisation de la liste1 sur la première valeur mais on peut toujours choisir une autre valeur dans l'unes des trois listes restantes et envoyer la requette, or moi je voudrais que l'utilisateur ne puisse choisir qu' une seule valeur d'une seule liste déroulante, les autres se mettent par defaut à une valeur nulle.
Merci encore pour ton aide!
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
21 juil. 2008 à 15:48
21 juil. 2008 à 15:48
Ok je testerai le code que je t'ai donné dans l'après midi selon mon temps libre. Ce doit être la propriété css disabled qui ne doit pas être bonne.
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
21 juil. 2008 à 16:09
21 juil. 2008 à 16:09
Ok, c'était bien ça, voici la correction sur la fonction qui change la propriété :
Chez moi tout fonctionne.
function enableDisable ( _list_, _disable_ ){ if ( _list_ != null ){ if ( _disable_ ) _list_.disabled = 'disabled'; else _list_.disabled = ''; } }
Chez moi tout fonctionne.
21 juil. 2008 à 11:34
21 juil. 2008 à 11:52
Par contre en relisant je viens de m'apercevoir d'une erreur de code (en gras ci-dessous):
Comme il s'agit d'une liste, ce n'est pas _obj_.value, mais _obj_.options[_obj_.options.selectedIndex].value qu'il faut mettre :
Sinon une explication du code manquait concernant cette partie :
Comme tu l'as vu je me suis permit d' "automatiser" le traitement de la façon suivante : tu donne en second paramètre de cette fonction, la liste des identifiant des listes que tu souhaite voir modifiée, chaque identifiant séparé par un ';'. Ainsi, en splitant cette chaine de caractère on récupère chaque identifiant et on appelle la fonction de modification de la sélection (ou celle qui modifie le style css) pour chaque liste dont l'identifiant a été renseigné.