Partage
  • Partager sur Facebook
  • Partager sur Twitter

Triple Liste déroulante

Sujet résolu
    23 mars 2011 à 16:44:33

    Bonjour,

    voila quelques jours que je bute sur ce soucis, j'ai une triple liste déroulante de cette maniere:

    <?php
    $datej=date("d-m-Y"); 
    	$annee=substr($datej, 6, 4) ;
    	echo "<table width='100%'>
    	<tr><td><label>Exercice</label></td><td>
    			<select name='exercice' id='exercice' OnChange='ListeLieeExercice()'>
    				<option value='-1'>Aucun</option>";
    	$an=2009;
    	while($annee>$an){
    		echo "<option value='".$an."'>".$an."/".($an+1)."</option>";
    		$an=$an+1;
    	}
    	echo "</select></td></tr>
    			<tr><td><label>Modèle Bateau</label></td><td>
    			<div id='modelebateau' style='display:inline'>
    			<select name='modelebat' id='modelebat' OnFocus='ListeLieeBateauArchive()'>
    				<option value='-1'>Aucun</option>
    				</select></td></tr>
    				</div>";
    	echo "<tr><td><label>Bateau</label></td><td>
    	<div id='bateau' style='display:inline'>
    	<select name='bateau'>
    		<option value='-1'>Aucun</option>
    	</select></td></tr>
    	</div>";
    	echo "</table><input name='soumettre' type='submit' value='Envoyer'>";
    ?>
    


    Mes 3 listes fonctionnent bien, j'ai juste un petit soucis, quand je selectionne ma première liste, la deuxième est bien alimentée, mais je voudrais qu'une fois que la deuxième est alimentée, elle alimente d'elle meme directement la 3eme.
    Actuellement pour remplur la 3eme, je dois allez selectionner dans ma 2eme liste déroulante, n'importe qu'elle donnée (autre que la 1ere), et pour avoir les info de ma donnée 1ere, obligé d'ouvrir la liste déroulante et de la selectionner.

    Vraiment pas terrible pour tout dire :s

    Je pense que cela viens de mon evenement qui ne devrait pas etre sur OnFocus, mais plutot sur OnLoad, sauf que le OnLoad n'existe pas sur une balise <select></select>

    Je fais appel à vos connaissance, car je commence a sécher :s j'ai essayer le OnChange, mais c'est pire avec.

    Voici mes fonctions Javascript et les deux fichiers php si vous en avez besoin, je ne pense pas mais je prefère vous donner ça, ça evite de perdre du temps si vous voulez les voir :)

    function ListeLieeBateauArchive(){
    	var xhr = getXhr();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    			leselect = xhr.responseText;
    			// On se sert de innerHTML pour rajouter les options a la liste
    			document.getElementById('bateau').innerHTML = leselect;
    		}
    	}
    	
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ListeLieeArchive.php",true);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	// ne pas oublier de poster les arguments
    	idbat = document.getElementById('modelebat').value;
    	annee = document.getElementById('exercice').value;
    	xhr.send("idModele="+idbat+"&annee="+annee);
    }
    function ListeLieeExercice(){
    	var xhr = getXhr();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    			leselect = xhr.responseText;
    			// On se sert de innerHTML pour rajouter les options a la liste
    			document.getElementById('modelebateau').innerHTML = leselect;
    		}
    	}
    	
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ListeLieeExercice.php",true);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	// ne pas oublier de poster les arguments
    	idex = document.getElementById('exercice').value;
    	xhr.send("idExercice="+idex);
    }
    


    ListeLieeArchive.php

    <?php
    	session_start();
    	include 'fonction.php';
    	connexion();
    	echo "<select name='bateau'>";
    	if(isset($_POST["idModele"])){
    		$res = mysql_query("SELECT IdBateau FROM archive where IdModeleBateau=".$_POST["idModele"]." and Periode='".$_POST['annee']."' ORDER BY IdBateau");
    		while($row = mysql_fetch_assoc($res)){
    			echo "<option value='".$row["IdBateau"]."'>".$row["IdBateau"]."</option>";
    		}
    	}
    	echo "</select></td></tr>";
    ?>
    


    ListeLieeExercice.php

    <?php
    	session_start();
    	include 'fonction.php';
    	connexion();
    	echo "<select name='modelebat' id='modelebat' OnFocus='ListeLieeBateauArchive()'>";
    	if(isset($_POST["idExercice"])){
    		$res = mysql_query("SELECT Distinct a.IdModeleBateau,NomModele FROM ModeleBateau m,archive a where m.IdModeleBateau=a.IdModeleBateau and Periode=".$_POST["idExercice"]." ORDER BY NomModele");
    		while($row = mysql_fetch_assoc($res)){
    			echo "<option value='".$row["IdModeleBateau"]."'>".$row["NomModele"]."</option>";
    		}
    	}
    	echo "</select></td></tr>";
    ?>
    
    • Partager sur Facebook
    • Partager sur Twitter
      23 mars 2011 à 23:49:35

      Ne suffirait-il pas simplement de mettre ListeLieeBateauArchive() entre les lignes 30 et 31 ?
      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2011 à 9:21:31

        honte à moi... j'avais essayé de le lancer dans ListeLieeExercice.php mais pas dans le JavaScript alors que c'était plus logique...
        Merci Golmote
        • Partager sur Facebook
        • Partager sur Twitter

        Triple Liste déroulante

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown