[AJAX] Deux select liés entre eux

Deux select liés entre eux [AJAX] - HTML/CSS - Programmation

Marsh Posté le 18-06-2006 à 17:57:02    

Bonjour à tous,
 
Voila, je viens de suivre un joli tutorial sur toutjavascript.com en ce qui concerne AJAX. Interessé, j'ai voulu me lancer dans mon premier script; deux listes déroulantes liées entre elles.
 
J'ai réussi sans probleme (en suivant le tutorial).
Le probleme c'est que dans mon second select, ca me rempli le "value" comme le champs. C'est à dire (en HTML pur)

Code :
  1. <option value="France">France</option>


 
Or je souhaiterai qu'il y ai l'id de la france dans value; comme ceci:

Code :
  1. <option value="1">France</option>


 
J'ai donc bien sur modifier ma requete pour avoir le pays et l'id_pays. Mais il faut bien sur changer un peu le code, quelqu'un pourrait-il m'aider ?
 
Je copie-colle mon code javascript

Code :
  1. <script type="text/javascript">
  2. function request05(f) {
  3. var l1    = f.elements["list1"];
  4. var l2    = f.elements["list2"];
  5. var index = l1.selectedIndex;
  6. if(index < 1)
  7.  l2.options.length = 0;
  8. else {
  9.  var xhr_object = null;
  10.  if(window.XMLHttpRequest) // Firefox
  11.   xhr_object = new XMLHttpRequest();
  12.  else if(window.ActiveXObject) // Internet Explorer
  13.   xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
  14.  else { // XMLHttpRequest non supporté par le navigateur
  15.   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  16.   return;
  17.  }
  18.  xhr_object.open("POST", "req.php", true);
  19.  xhr_object.onreadystatechange = function anonymous() {
  20.   if(xhr_object.readyState == 4)
  21.    eval(xhr_object.responseText);
  22.  }
  23.  xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded" );
  24.  var data = "family="+escape(l1.options[index].value)+"&form="+f.name+"&select=list2";
  25.  xhr_object.send(data);
  26. }
  27. }
  28. </script>
  29. ------------------
  30. <select name="list2">
  31. </select>


 
ET la page PHP:

Code :
  1. header('Content-type: text/html; charset=iso-8859-1');
  2. include('./../config/config.php');
  3. connexion();
  4. $query  = "SELECT appellation FROM cavisteonline_appellation WHERE id_typeappellation = '".$_POST["family"]."'";
  5. $result = mysql_query($query) or die('Erreur SQL : <br />'.$query);
  6. echo 'var o = null;';
  7. echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
  8. echo 's.options.length = 0;';
  9. while($r = mysql_fetch_array($result))
  10. echo 's.options[s.options.length] = new Option("'.$r["appellation"].'" );';


 
Merci de vos reponses.

Reply

Marsh Posté le 18-06-2006 à 17:57:02   

Reply

Marsh Posté le 19-06-2006 à 08:11:55    

Dans le script PHP,
au lieu de:
SELECT appellation FROM
tu mets:
SELECT id, appellation FROM
 
tu ajoute un export des IDs dans une array JS:

Code :
  1. echo 'var opt_courante = new Option("'.addslashes($r['appellation']).'" );';
  2. echo 'opt_courante.value='.$r['id'].';';
  3. echo 's.options[s.options.length] = opt_courante;';


Reply

Marsh Posté le 19-06-2006 à 13:00:19    

Merci beaucoup, je teste ce soir.
Merci encore

Reply

Marsh Posté le 19-06-2006 à 19:29:00    

nargy a écrit :

Dans le script PHP,
au lieu de:
SELECT appellation FROM
tu mets:
SELECT id, appellation FROM
 
tu ajoute un export des IDs dans une array JS:

Code :
  1. echo 'var opt_courante = new Option("'.addslashes($r['appellation']).'" );';
  2. echo 'opt_courante.value='.$r['id'].';';
  3. echo 's.options[s.options.length] = opt_courante;';



 
Super, merci ca marche impec, j'avais un peu trifouillé mais sans succès.
 
J'avoue cependant ne pas bien comprendre le bout de code.
 
Voila, merci encore

Reply

Marsh Posté le 19-06-2006 à 20:09:09    

1ère ligne: créer l'option, par exemple 'Paris'
2ème ligne: affecter l'id de 'Paris' à la valeur de l'option, par exemple '75'
3ème ligne: ajouter l'option au select
 
équivalent HTML:

Code :
  1. <select name="ville">
  2. <option value="75">Paris</option>
  3. </select>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed