Problème de récupération valeur d'un select en javascript avec firefox

Problème de récupération valeur d'un select en javascript avec firefox - HTML/CSS - Programmation

Marsh Posté le 21-05-2006 à 00:11:03    

Bonjour, alors voilà j'ai fait un petit module de recherche en ajax. Ca marche parfaitement sous Internet Explorer et Opera mais sous Firefox, ca ne veut pas.
Voici un petit exemple de l'application à cette adresse : http://generation-iutfbleau.com/te [...] herche.php
 
Vous pouvez constater que ca ne marche pas sous Firefox. J'ai réussi a identifier d'où vient mon problème : il ne récupère pas la valeur des "select".  
 
Voici une portion de mon code javascript :
 

Code :
  1. //Initialise un objet XMLHttpRequest
  2. function get_xhr()
  3. {
  4.      if(window.XMLHttpRequest) xhr=new XMLHttpRequest(); //Navigateurs Firefox, Opera et autres
  5. else if(window.ActiveXObject)                            //Navigateur Internet Explorer
  6.    {
  7.    try { xhr=new ActiveXObject("Msxml2.XMLHTTP" ); }
  8.    catch(err) { xhr=new ActiveXObject("Microsoft.XMLHTTP" ); }
  9.    }
  10. else                                                     //XMLHttpRequest non supporté par le navigateur
  11.    {
  12.    alert("Votre navigateur ne supporte pas les objets XMLHttpRequest. Pour remédier à ce problème, veuillez mettre à jour votre navigateur." );
  13.    xhr=false;
  14.    return -1;
  15.    }
  16. }
  17. //Récupère le nombre de personnes sélectionnées
  18. function nb_personnes()
  19. {
  20. //Etat n°4 : données prêtes. Statut n°200 : code de réponse du serveur (200 : ok)
  21. if(xhr.readyState==4 && xhr.status==200) document.getElementById('menu_recherche').innerHTML=xhr.responseText;
  22. }
  23. //Récupère le type d'affichage sélectionnées
  24. function type_affichage()
  25. {
  26. //Etat n°4 : données prêtes. Statut n°200 : code de réponse du serveur (200 : ok)
  27. if(xhr.readyState==4 && xhr.status==200) document.getElementById('menu_recherche').innerHTML=xhr.responseText;
  28. }
  29. //Envoie une requête dès que les données sont prêtes
  30. function envoyer_requete(url,process,methode,asynchrone,flag)
  31. {
  32. //Initialisation objet XMLHttpRequest
  33. get_xhr();
  34. xhr.onreadystatechange=process;
  35. //Url pour le menu de recherche :  
  36. if(flag==1) url=url+"&nb="+document.getElementById('nombre_personnes').value+"&affichage="+document.getElementById('type_affichage').value;
  37. if(flag==2) document.getElementById('chargement').style.display='block';
  38. //On ouvre la connexion avec le serveur
  39. xhr.open(methode,url,asynchrone);
  40. //On envoie la requête
  41. xhr.send(null);
  42. }


 
 
Le problème vient donc du "document.getElementById('nombre_personnes').value" et du "document.getElementById('type_affichage').value" dans la fonction envoyer_requete(). Si je mets une valeur absolue pour la variable url, ca marche parfaitement.
J'ai cherché sur le net les différentes façons de récupérer les valeurs d'un select mais toutes les solutions sur j'ai pu essayer n'ont pas marchées.
Ah oui, autre précision lorsque j'exécute la console javascript de firefox, il me dit : document.getElementById("nombre_personnes" ) has no properties. Pourtant, il a la propriété "value" dans mon code ...
 
Si quelqu'un a une idée, merci pour vos réponses.

Reply

Marsh Posté le 21-05-2006 à 00:11:03   

Reply

Marsh Posté le 21-05-2006 à 00:20:49    

on pourrait voir le HTML associé à ton truc ?

Reply

Marsh Posté le 21-05-2006 à 00:28:45    

Alors en fait j'ai un fichier php qui fait appel à une fonction : "menu_recherche()" qui gère les requêtes en fonction des paramètres sélectionnées :  
 

Code :
  1. //On affiche le menu de recherche                                                     
  2. echo "<table border='0' width='448' cellpadding='2' cellspacing='0'>";                               
  3. menu_recherche($query,$nom,$nb_personnes,$methode,$type_affichage,1);                       
  4. echo "</table> <br/>";
  5.        
  6. //On affiche le résultat de la recherche
  7. echo "<body onload=\"envoyer_requete('$site/ajax.php?fct=1&flag=1&arg_req=$nom&ordre=$methode',nb_personnes,'GET','true',1);\">";
  8. echo "</body>";       
  9.       
  10. //Ajax : si la requête change, elle est réaffichée
  11. echo "<div id='menu_recherche'> </div>";


 
Cette partie fait appel à la fonction menu_recherche() que voici :  

Code :
  1. function menu_recherche($requete,$arg_req,$nb,$ordre,$type_affichage,$flag)
  2. {
  3. //Valeur du nombre de personnes par page et du type d'affichage
  4. $nb_personnes[0]="5"; $nb_personnes[1]="10"; $nb_personnes[2]="20"; $nb_personnes[3]="30"; $nb_personnes[4]="40"; $nb_personnes[5]="50";
  5. $affichage[0]="normal"; $affichage[1]="detaille";
  6. //On réactualise la requête en ajoutant la contrainte du nombre de personne à afficher et le type d'affichage
  7. $requete.= " limit 0,$nb";
  8. //Menu déroulant "nombre de personnes à afficher"
  9. echo "<tr> <td> <div align='left'>";
  10. echo "Personnes par page : ";
  11. echo "<select name='nombre_personnes' onChange=\"envoyer_requete('$site/ajax.php?fct=1&flag=$flag&arg_req=$arg_req&ordre=$ordre',nb_personnes,'GET','true',1);\">";
  12. for($i=0;$i<count($nb_personnes);$i++)
  13.    {
  14.    if($nb_personnes[$i]==$_COOKIE["nb_personnes"]) echo "<option selected value='$nb_personnes[$i]'> $nb_personnes[$i] </option>";
  15.    else echo "<option value='$nb_personnes[$i]'> $nb_personnes[$i] </option>";
  16.    }           
  17. echo "</select>";
  18. //Menu déroulant "Type d'affichage"
  19. echo "<td> <div align='right'>";
  20. echo "Affichage : ";
  21. echo "<select name='type_affichage' onChange=\"envoyer_requete('$site/ajax.php?fct=1&flag=$flag&arg_req=$arg_req&ordre=$ordre',type_affichage,'GET','true',1);\">";
  22. for($i=0;$i<count($affichage);$i++)
  23.    {
  24.    if($affichage[$i]==$_COOKIE["type_affichage"]) echo "<option selected value='$affichage[$i]'> $affichage[$i] </option>";
  25.    else echo "<option value='$affichage[$i]'> $affichage[$i] </option>";
  26.    }     
  27. echo "</select> </td> </tr>";
  28. echo "</div>";
  29. }


 
Après une fois la fonction menu_recherche() exécutée, elle fait appel au javascript que j'ai mis au début de cette page et qui est chargé entre autre de récupérer les valeurs des 2 selects.


Message édité par JC_Shaolan le 21-05-2006 à 00:31:07
Reply

Marsh Posté le 21-05-2006 à 00:44:37    

tu fais un getElementById sur un élément qui n'a pas d'id [:petrus75]
 
si déjà en plus du name="", tu mettais un id je pense que cela fonctionnerai mieux [:petrus75]
 
un autre truc me choc :  
si ce code :  

Code :
  1. //On affiche le menu de recherche                                                     
  2.     echo "<table border='0' width='448' cellpadding='2' cellspacing='0'>";                               
  3.     menu_recherche($query,$nom,$nb_personnes,$methode,$type_affichage,1);                       
  4.     echo "</table> <br/>";
  5.          
  6.     //On affiche le résultat de la recherche
  7.     echo "<body onload=\"envoyer_requete('$site/ajax.php?fct=1&flag=1&arg_req=$nom&ordre=$methode',nb_personnes,'GET','true',1);\">";
  8.     echo "</body>";       
  9.                        
  10.     //Ajax : si la requête change, elle est réaffichée
  11.     echo "<div id='menu_recherche'> </div>";


c'est celui d'une seule et même page il est à chier mais d'une force  phénoménale.

Reply

Marsh Posté le 21-05-2006 à 00:52:40    

Ah oui, merci beaucoup Gatsu35. Je pensais que la propriété "name" correspondait à l'id ...  
De toute facon, ca sentait l'erreur bidon.
 
Sinon, à propos de ta dernière remarque, j'espère que je te rassure en te disant que ce n'est pas celui d'une seule et même page. Il y a bien d'autre chose à côté mais j'allais pas flooder avec des centaines de lignes de code.
 
Encore Merci  :bounce:


Message édité par JC_Shaolan le 21-05-2006 à 00:53:10
Reply

Sujets relatifs:

Leave a Replay

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