Votre question

Affichage balise <select>

Tags :
  • Select
  • Javascript
  • Programmation
Dernière réponse : dans Programmation
26 Mars 2012 11:32:34

affichage balise select

Messagede ladinho58 le 20 Mar 2012, 17:03
Bonjour,

j'ai encore quelques difficultés à réaliser ce que je souhaite.
A partir d'une première balise select, je souhaiterai qu'en fonction de ce que l'on sélectionne dans ce select, on affiche ou non une autre balise select complémentaire de la première.
Pour ce faire, lors de la création de la première balise select, je fais un appel à une fonction javascript qui va dire d'afficher ou non la seconde balise select.
J'ai fait quelque chose d'un peu tordu alors suivez bien :) 

Voici la fonction qui crée ma première balise :

  1. function addOffresCommerciales($id,$selected){
  2. $req = "SELECT id_offre_commerciale, intitule_offre, active, visite FROM offre_commerciale";
  3. $result = mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req);
  4. echo "<select id='".$id."' name='".$id."'>";
  5. while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
  6. if($row['active'] == 1){
  7. if(isset($selected) && $selected == $row['id_offre_commerciale']) $sel = "selected='selected'"; else $sel = "";
  8. echo "<option ".$sel." value='".$row['id_offre_commerciale']."' onClick=chmpOffre(this.value)>".$row['intitule_offre']."</option>
  9. ";
  10. }
  11. }
  12. echo "</select>";
  13.  
  14. }


Donc ici, j'appelle la fonction javascript chmpOffre où this.value contient la valeur de la balise select, à savoir l'id de l'offre que j'ai sélectionné.

Ensuite, voici la fonction chmpOffre que je crée. texte contient la valeur de l'id de l'offre que j'ai sélectionné

  1. function chmpOffre(texte)
  2. {
  3. var chmp = document.getElementById("visites");
  4. //chmp fait référence à la seconde balise select que je souhaite voir affiché ou non. Cette balise select est toujours la même. Elle ne change jamais. Soit elle est affichée, soit elle ne l'est pas.
  5.  
  6. //on a créé autant de formulaires qu'il n'y a d'offres qui proposent des visites. Chacun de ces formulaires comporte un name, un id et une value
  7. //Ces trois informations sont les memes et valent id_offre_commerciale.
  8. //on crée donc une variable a qui va contenir value de l'élément dont l'id vaut l'id_offre_commerciale
  9. //Si a existe réellement, c'est que l'on a sélectionné dans la liste une offre qui possède une visite
  10. //si a n'existe pas, alors il n'existe pas d'éléments dans cette page qui ont pour id l'id_offre_commerciale, donc l'offre sélectionnée ne comprend pas de visites.
  11. var a=document.getElementById(texte).value;
  12. if(a)
  13. {
  14. chmp.style.display="inline";
  15. }
  16. else chmp.style.display="none";
  17. }

Et dans mon code php, je crée un certain nombre de formulaires cachés qui contiennent les id des offres qui doivent laisser affiché le second select. A partir de ces id, je vais voir si la valeur sélectionnée correspond à un id de mes formulaires cachés. Si tel est le cas, alors cela signifie que l'offre que j'ai sélectionné doit laisser apparaitre le second select, dans le cas contraire, on n'affiche pas la balise.

  1. $req="SELECT id_offre_commerciale FROM offre_commerciale WHERE visite=1";
  2. $reqquery=mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $reqquery);
  3. while($row=mysql_fetch_array($reqquery,MYSQL_ASSOC))
  4. {
  5. echo '<input type="hidden" name="'.$row['id_offre_commerciale'].'" id="'.$row['id_offre_commerciale'].'" value="'.$row['id_offre_commerciale'].'"></input>';
  6. }


Finalement, mon code fonctionne, c'est-à-dire que si jamais je sélectionne une offre qui doit afficher la seconde balise, elle le fait. Seulement, je change d'avis et qu'au final je sélectionne une offre qui n'a pas besoin de voir affiché la balise, celle-ci reste affichée. Là est mon problème !

Savez-vous ce qui ne va pas dans mon code ? merci d'avance.

Autres pages sur : affichage balise select

a c 232 L Programmation
26 Mars 2012 13:53:06

Salut,

C'est parce que tu ne changes que la valeur du display de l'élément sélectionné.
Il faut que tu fasses une boucle sur tous les éléments et que tu les caches tous, puis tu n'affiches que celui sélectionné.
26 Mars 2012 15:21:04

Je suis désolé mais j'ai du mal à comprendre où tu veux en venir..

Contenus similaires
26 Mars 2012 15:24:16

En fait là où je ne comprend pas c'est que de toutes façons j'appelle ma fonction JavaScript avec un element OnClick, donc elle est appelée à chaque fois que je sélectionne quelque chose dans ma balise select. Donc ma variable "a" qui contient la valeur de mon select est censé changer à chaque fois que je modifie ma sélection..
a c 232 L Programmation
26 Mars 2012 15:35:40

Oui et ?
On va dire que tu as 3 éléments :
- Element 1
- Element 2
- Element 3


Tu cliques sur Element 1, tu exécutes ta fonction qui affiche l'input de l'élément 1
Tu cliques sur Element 3, tu exécutes ta fonction qui affiche l'input de l'élément 3
A aucun moment tu as caché l'input de l'élément 1 après avoir cliqué sur le 3.
26 Mars 2012 15:40:52

Je crois comprendre ce que tu veux me dire, mais comment veux-tu que je cache l'ancien élément sélectionné qui est le même que le nouvel élément que j'ai sélectionné ?:??: 
26 Mars 2012 15:43:50

C'est tout bon !
Au tout début de ma fonction javascript, je dis de ne pas afficher le champ select. Merci du coup de main omar ! j'apprécie
26 Mars 2012 15:45:07

Je te laisse le soin de mettre ce post comme étant résolu, je suis tout nouveau sur ce site, je n'ai pas encore toutes mes marques :) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS