Lier liste déroulante

Signaler
Messages postés
345
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
13 mai 2011
-
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
-
Bonjour, je souhaite avoir deux listes déroulantes liées sans recharger la page. J'ai fait :

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

<script type= "text/javascript">
var Ld1Id='';
var Ld2Id='';
var id_liste='';
 
 
function ValideLd2(val){
Ld1Id=val; //id_département
id_liste='2';//Utilisé dans la fonction ChargeLd() pour identifier la liste déroulante
var LD_URL = 'ValideLd2.php?Ld1='+Ld1Id;
ObjetXHR(LD_URL)
// Réinitialisation de Ld3 si modification de LD1 après passage en Ld2
if(Ld2Id!=''){ValideLd3(''); }
}
 
function ValideLd3(val){
Ld2Id=val; //id_commune
id_liste='3'; //Utilisé dans la fonction ChargeLd() pour identifier la liste déroulante
var LD_URL = 'ValideLd3.php?Ld1='+Ld1Id+'&Ld2='+Ld2Id;
if(Ld2Id==''){var LD_URL = 'ValideLd3.php';}
ObjetXHR(LD_URL)
}
 
function ObjetXHR(LD_URL){
//creation de l'objet XMLHttpRequest
if(window.XMLHttpRequest){// Mozilla,...
xmlhttp=new XMLHttpRequest();
if(xmlhttp.overrideMimeType){
xmlhttp.overrideMimeType('text/xml');
}
xmlhttp.onreadystatechange=ChargeLd;
xmlhttp.open("GET", LD_URL, true);
xmlhttp.send(null);
}elseif(window.ActiveXObject){//IE
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
if(xmlhttp){
xmlhttp.onreadystatechange=ChargeLd;
xmlhttp.open('GET', LD_URL, false);
xmlhttp.send();
}
}
// Bouton non apparent car modification de LD1 ou Ld2
document.getElementById('buttons').style.display='none';
}
 
// fonction pour manipuler l'appel asynchrone
function ChargeLd(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
//span id="niv2" ou "niv3"
document.getElementById('niv'+id_liste).innerHTML=xmlhttp.responseText;
if(xmlhttp.responseText.indexOf('disabled')<=0){
//focus sur liste déroulante 2 ou 3
document.getElementById('Liste'+id_liste).focus();
}
}
}
}
 
function Affiche_Btn(){
document.getElementById('buttons').style.display='inline';
}
 
</script>

<!-- END TEMPLATE: bbcode_code -->
fichier ValiderLd1.php

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

<?PHP
include 'Connexionbd.php';
$rq ="Select id_commune, nom_commune from communes order by nom_commune LIMIT 10;";
$rq_pos_id= 0; //position dans le SQL de la clé de la liste déroulante idem dans ValideLd2.php et ValideLd3.php
$rq_pos_val=1; //position dans le SQL de la valeur de la liste déroulante idem dans ValideLd2.php et ValideLd3.php
 
$result= mysql_query ($rq) or die ("Select impossible");
$retour = '<select name="Liste1" id="Liste1" size="1" onchange="ValideLd2(this[this.selectedIndex].value);">';
$retour .= '<option selected value="">Choisir...</option>';
if(mysql_num_rows($result) != 0){
while($row = mysql_fetch_row($result)){
$retour .= '<option value="'. $row[$rq_pos_id] .'">'. $row[$rq_pos_val] .'</option>';
}
$retour .= '</select>';
}else{
$retour = '';
}
mysql_free_result($result);
mysql_close($connexion);
echo $retour;
?>

<!-- END TEMPLATE: bbcode_code -->
fichier ValiderLd2

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

<?php
include 'Connexionbd.php';
$Ld1_retour =''; //id_département clé de la liste déroulante 1
 
if(isset($_GET['Ld1']))
{
$Ld1_retour = $_GET['Ld1'];
}
 
if($Ld1_retour!=''){
$rq="Select id_commune, nom_commune from communes where id_commune=".$Ld1_retour." order by nom_commune;";
$rq_pos_id=0;
$rq_pos_val=1;
$result= mysql_query ($rq) or die ("Select impossible");
$retour = '<select name="Liste2" id="Liste2" size="1" onchange="Affiche_Btn();">';
$retour .= '<option selected value="">Choisir...</option>';
 
if(mysql_num_rows($result) != 0){
while($row = mysql_fetch_row($result)){
$retour .= '<option value="'. $row[$rq_pos_id] .'">'. $row[$rq_pos_val] .'</option>';
}
$retour .= '</select>';
}else{
$retour = '.$Ld1_retour.'">';
}
mysql_free_result($result);
mysql_close($connexion);
}else{
$retour = '<select name="Liste2" id="Liste2" size="1"><option>Vide</option></select>';
}
 
echo $retour;
?>

<!-- END TEMPLATE: bbcode_code -->

Mais je n'arrive pas a avoir de valeur dans la seconde liste. Voyez vous un problème dans le code ??? Merci

1 réponse

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14