Affichage d'une liste selon ce qu'on sélectionne

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage d'une liste selon ce qu'on sélectionne

Re: Affichage d'une liste selon ce qu'on sélectionne

par moogli » 01 mars 2012, 11:29

y a rien qui te choque dans : style="display:chmpOffre()" ?

pour être clair tu essai d'utiliser un display qui aurai pour nom chmpOffre() hors css n'offre pas cette possibilité.

tu utilise tu javascript et ça ne se met pas n'importe où !

cette fonction est a utiliser dans l'attribut onchange de la liste.

je te conseil de regarde les tutos dont parle Ryle c'est dedans.

@+

Re: Affichage d'une liste selon ce qu'on sélectionne

par ladinho58 » 01 mars 2012, 10:57

Ca me saoule, jsuis sur que c'est un truc trop con à faire et je bloque dessus comme pas possible !
J'ai d'abord essayé de modifier ma fonction javascript avec le switch que tu m'as conseillé, en vain.

Ensuite j'ai essayé un ptit truc :

formulaires :
<td colspan=3>
	<?php 
	if(!isset($_SESSION['session_offrecommerciale']))$_SESSION['session_offrecommerciale']="";
	if(isset($_SESSION['session_offrecommerciale']))
		addOffresCommerciales("offrecommerciale", $_SESSION['session_offrecommerciale']);
	else
		addOffresCommerciales("offrecommerciale", "");
	?>

<select id="visites" name="visites" style="display:chmpOffre()";<?php //if(isset($_SESSION['session_offrecommerciale']) && ($_SESSION['session_offrecommerciale']==3) || ($_SESSION['session_offrecommerciale']==4) || ($_SESSION['session_offrecommerciale']==5))  echo 'style="display:inline"';else echo 'style="display:none"'?>>
	<option value="avec" <?php if(isset($_SESSION['session_visite']) &&$_SESSION['session_visite'] == "avec") echo "selected='selected'" ?> >Avec visite</option>
	<option value="sans" <?php if(isset($_SESSION['session_visite']) &&$_SESSION['session_visite'] == "sans") echo "selected='selected'" ?> >Sans visite</option>
</select>
</td>
fonction addOffresCommerciales
function addOffresCommerciales($id,$selected){
	$req = "SELECT id_offre_commerciale, intitule_offre, active FROM offre_commerciale";
	$result = mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req);
	echo "<select id='".$id."' name='".$id."'>";
	while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
		if($row['active'] == 1){
			if(isset($selected) && $selected == $row['id_offre_commerciale']) $sel = "selected='selected'"; else $sel = "";
			echo "<option ".$sel." value='".$row['id_offre_commerciale']."' onClick=chmpOffre(this.value)>".$row['intitule_offre']."</option>
			";
		}
	}
	echo "</select>";
		
}
enfin mon code JS.

Code : Tout sélectionner

<script type="text/javascript"> function chmpOffre(texte) { var chmp = document.getElementById("visites"); var output; switch(texte) { default : case 1 : //bienvenue case 2 : //bienvenue 21 var output = "none"; //chmp.style.display = "none"; break; case 3 : //bienvenue expert case 4 : //bienvenue rcc case 5 : //bienvenue tcc var output = "inline"; //chmp.style.display = "inline"; break; } return output; } </script>
J'ai tenté de faire un return none ou return inline dans mon javascript et utiliser le résultat de la fonction JS pour l'imbriquer dans le display

Re: Affichage d'une liste selon ce qu'on sélectionne

par Ryle » 29 févr. 2012, 22:46

Il y a des tuto dans la FAQ pour gérer des listes liées (simple ou avec ajax), mais ce que tu as fait me semble pas mal :)

Par contre, le "break" ne s'utilise que pour quitter une boucle ou un switch.. il ne servent donc à rien dans ta fonction javascript. Ceci dit, tu peux simplifier tes if() par un switch :
function chmpOffre(texte){
   var chmp = document.getElementById("visites");
   switch(texte) {
      default :
      case 0 :  //bienvenue 
      case 1 : //bienvenue 21
         chmp.style.display = "none";
         break;
      case 2 :  //bienvenue expert
      case 3 :  //bienvenue rcc
      case 4 :  //bienvenue tcc
         chmp.style.display = "inline";
         break;
   }
}

Re: Affichage d'une liste selon ce qu'on sélectionne

par ladinho58 » 29 févr. 2012, 18:19

J'ai essayé de modifier quelques trucs, bon ça marche toujours pas mais je pense que je me rapproche de la vérité :) Dites moi ce que vous en pensez

Mon formulaire :
d colspan=3>
	<?php 
	if(isset($_SESSION['session_offrecommerciale']))
		addOffresCommerciales("offrecommerciale", $_SESSION['session_offrecommerciale']);
	else
		addOffresCommerciales("offrecommerciale", "");
	?>

<select id="visites" name="visites" <?php if(isset($_SESSION['session_offrecommerciale']) && ($_SESSION['session_offrecommerciale']==3)|| ($_SESSION['session_offrecommerciale']==4)|| ($_SESSION['session_offrecommerciale']==5))  echo 'style="display:inline"';else echo 'style="display:none"'?>>
	<option value="avec" <?php if(isset($_SESSION['session_visite']) &&$_SESSION['session_visite'] == "avec") echo "selected='selected'" ?> >Avec visite</option>
	<option value="sans" <?php if(isset($_SESSION['session_visite']) &&$_SESSION['session_visite'] == "sans") echo "selected='selected'" ?> >Sans visite</option>
</select>
</td>
Ma fonction addOffresCommerciales :
function addOffresCommerciales($id,$selected){
	$req = "SELECT id_offre_commerciale, intitule_offre, active FROM offre_commerciale";
	$result = mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req);
	echo "<select id='".$id."' name='".$id."'>";
	while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
		if($row['active'] == 1){
			if(isset($selected) && $selected == $row['id_offre_commerciale']) $sel = "selected='selected'"; else $sel = "";
			echo "<option ".$sel." value='".$row['id_offre_commerciale']."' onClick=chmpOffre(this.value)>".$row['intitule_offre']."</option>
			";
		}
	}
	echo "</select>";
		
}
Enfin, la fonction chmpOffre appelée normalement dès qu'on veut sélectionner une offre :

Code : Tout sélectionner

<script type="text/javascript"> function chmpOffre(texte){ var chmp = document.getElementById("visites"); if(texte==0){ chmp.style.display = "none"; //bienvenue break; } if(texte==1){ chmp.style.display = "none"; //bienvenue 21 break; } if(texte==2){ chmp.style.display = "inline"; //bienvenue expert break; } if(texte==3){ chmp.style.display = "inline"; //bienvenue rcc break; } if(texte==4){ chmp.style.display = "inline"; //bienvenue tcc break; } } </script>

Affichage d'une liste selon ce qu'on sélectionne

par ladinho58 » 29 févr. 2012, 17:19

Bonjour,

le titre de mon sujet n'est peut être pas très explicite, mais je ne savais pas trop comment l'exprimer autrement en peu de mot.

En gros, voici mon problème :
On dispose d'une liste de 5 noms. Je voudrais que selon le mot que l'on sélectionne dans la liste, ça affiche à coté ou non une autre liste (sorte de sous liste).
Par exemple, dans mon cas :
j'ai une liste d'offres commerciales. Certaines offres, mais pas toutes, disposent d'une sorte d'option supplémentaire. Et donc, je souhaiterai afficher cette option, uniquement si on choisit la bonne offre (Pas la peine de mettre une option à une offre qui n'en a pas !)

Pour le moment, voici à quoi ressemble mon code :
<td>
	<label for="offrecommerciale">Offre commerciale</label>
</td>
<td colspan=3>
	<?php //la fonction addOffresCommerciales va lister toutes les offres disponibles.
	if(isset($_SESSION['session_offrecommerciale']))
		addOffresCommerciales("offrecommerciale", $_SESSION['session_offrecommerciale']);
	else
		addOffresCommerciales("offrecommerciale", "");
	?>

<select id="visites" name="visites" <?php if( isset($_SESSION['session_offrecommerciale']) && ($_SESSION['session_offrecommerciale']==3) || ($_SESSION['session_offrecommerciale']==4) || ($_SESSION['session_offrecommerciale']==5) ) echo 'style="display:inline"';else echo 'style="display:none"'?>>
	<option value="avec" <?php if(isset($_SESSION['session_visite']) &&$_SESSION['session_visite'] == "avec") echo "selected='selected'" ?> >Avec visite</option>
	<option value="sans" <?php if(isset($_SESSION['session_visite']) &&$_SESSION['session_visite'] == "sans") echo "selected='selected'" ?> >Sans visite</option>
</select>
</td>
Voici la fonction addOffresCommerciales :
function addOffresCommerciales($id,$selected){
	$req = "SELECT id_offre_commerciale, intitule_offre, active FROM offre_commerciale";
	$result = mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req);
	echo "<select id='".$id."' name='".$id."'>";
	while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
		if($row['active'] == 1){
			if(isset($selected) && $selected == $row['id_offre_commerciale']) $sel = "selected='selected'"; else $sel = "";
			echo "<option ".$sel." value='".$row['id_offre_commerciale']."'>".$row['intitule_offre']."</option>
			";
		}
	}
	echo "</select>";
		
}
Je pensais qu'en utilisant display ca allait fonctionner, mais j'ai meme l'impression qu'il ne rentre meme pas dans le code php dans la balise select. Quand j'inverse display inline et display none ca ne change absolument rien, quoi que je sélectionne comme offre, ce que je souhaite voir affiché de temps en temps est constamment affiché.