IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

récupérer la valeur d'une liste déroulante dynamique [Trucs & Astuces]


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut récupérer la valeur d'une liste déroulante dynamique
    Salut,

    sur mon application, je génère une liste dynamique via Ajax. Cette liste s'affiche dans un select tout simple, mais je n'arrive pas à récupérer la valeur de la ligne sélectionnée dans mon select.

    Quelqu'un aurait une idée?

    remarque : après avoir affiché la liste dans mon select, lorsque j'édite le source, mon select ne contient pas d'options, c'est pour cela que le traditionnel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('liste').options[document.getElementById('liste').selectedIndex].value
    ne fonctionne pas.

    Merci

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    bref, tu veux récupérer la valeur d'une option qui n'existe pas?

    bon courage;

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    c'est pas normal que les options ne s'affichent pas dans ma source ?

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    si la liste est créée dynamiquement par js, si! mais il n'empêche que la liste doit avoir un id et souvent un name, et chaque option une valeur; c'est peut-être un de ces paramètres que tu ne parviens pas à récupérer;

  5. #5
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Ma liste est déclarée de la façon suivante. y'a un souci dans cette déclaration?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name=results size=13 style="width:519px"></select>

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    il faut vérifier si oui ou non des options ont été ajoutées à ce "cadre vide";

  7. #7
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    après le passage du script Ajax, dans le source y'a rien, par contre j'ai des résultats affiché dans le select.

  8. #8
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    OK, j'ai contourné le problème. Voici ma solution pour ceux que cela peut intéresser. L'utilisation d'un select pour afficher les résultats n'est pas une bonne solution. il faut lui préférer un <div id=nom> dans lequel on pourra mettre en forme ses données simplement, par exemple en plaçant des liens sur chacune des lignes.

    En tous cas, merci pour ton aide twister :-)

  9. #9
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    d'accord avec toi pour la gestion de listes par div, ou par ul/li, mais attention, la balise select n'était pour rien dans ton problème:
    d'ailleurs, as-tu essayé un alert du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var l=document.getElementById('liste').options;
    var aff="";
     
    for(i = 0;i != l.length;i++){
    aff+=l[i].value+"\n";
    };
     
    alert(aff);
    ??

    en tout cas, comprends bien qu'une requête serveur javascript ne modifiera pas la source de ton document, même si la réponse amène des bouleversements considérables; c'est tout le principe de dhtml...

  10. #10
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    en fait c est un bug dans ie seulement, on ne peut pas ajouter dynamiquement des options dans un select avec un innerHTML.

    Si on veut le faire, il faut passer par des new Options.

    Avec xhr ca peut etre fastidieux.

    Du coup pour ie, il faut mettre un div et c est dans ce div qu'on fait le innerHTML du select complet avec ses options
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  11. #11
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Bon autant j'ai pu me débrouiller en substituant une liste à un id, autant j'aime pas rester sur un échec et ne pas comprendre.

    voici ma page web affichant le formulaire:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      <body>
        <form name=f>
          <select id=selection size=10 style="width:200px"></select><br>
          <input type=button name=b1 value=chercher onClick="chercher();">
          <input type=button name=b2 value=afficher onClick="afficher();">
        </form>
      </body>
    le script chercher lance une recherche SELECT champs1, champs2 FROM table

    et voici comment je traite la réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    function handleHttpResponse(){
      while (document.f.selection.length > 0){
        document.f.selection.options[0] = null;
      }
      if (http.readyState == 4){
     
        var tableau = http.Responsetext.split('+++');
        for (i=0;i<tableau.length;i++){
          var tableau2 = tableau[i].split('---');
          newoption = new Option(tableau2[1],tableau2[2],false,false);
          if (tableau2[0] > 0){
            document.f.selection.options[document.f.selection.length] = newoption;
          }
        }
      }
    }
    si je tente d'afficher (avec le bout de script de twister) la valeur sélectionnée dans la liste dynamique générée via Ajax, ça marche pas...

    pourquoi?

    Merci

  12. #12
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    c est pas Responsetext mais responseText
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  13. #13
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    non, ce n'est pas l'affichage dans le select qui pose problème.
    mais l'utilisation du bouton afficher qui exécute le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function afficher(){
      var l=document.getElementById('selection').options; 
      var aff=""; 
     
      for(i = 0;i != l.length;i++){ 
        aff+=l[i].value+"\n"; 
      } 
     
      alert(aff);
    }

  14. #14
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    et quel est le probleme ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  15. #15
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    <select id="selection" name="selection" size=10 style="width:200px">
    id + name...

  16. #16
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    oui, j'ai viré le id... désolé.

    Le problème est que lorsque je tente d'affiche la valeur de la ligne sélectionnée dans la liste via le bouton afficher, mon pop up est vide...

  17. #17
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    liste = document.getElementById('selection'); 
    alert(liste.options[liste.selectedIndex]);
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  18. #18
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    quelle est l'erreur?
    le message est null ou la valeur est vide?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function afficher(){ 
      var l=document.getElementById('selection').options; 
      var aff=""; 
     
      for(i = 0;i < l.length;i++){ 
        aff+="valeur:"+l[i].value+"texte:"+l[i].text+"+"\n"; 
      } 
     
      alert(aff); 
    }

  19. #19
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    le pop up est vide...

    j'ai refait ma fonction afficher de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function afficher(){
      liste = document.getElementById('selection'); 
      alert(liste.options[liste.selectedIndex]);
    }
    et maintenant ça m'affiche [object].

    Par contre, si je fait :
    alert(liste.options[liste.selectedIndex].value);
    le pop up est de nouveau vide

  20. #20
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    -> les valeurs entrées sont vides!!!

Discussions similaires

  1. [MySQL] récupérer la valeur d'une liste déroulante pour paramètrer le lien d'un panier dynamique
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/06/2011, 16h34
  2. Récupérer la valeur d'une liste déroulante
    Par Lenezir dans le forum Langage
    Réponses: 6
    Dernier message: 25/01/2008, 16h35
  3. Réponses: 10
    Dernier message: 28/11/2007, 11h12
  4. récupérer la valeur d'une liste déroulante + comparaison de dates
    Par jackseed dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/06/2007, 16h29
  5. Réponses: 11
    Dernier message: 26/04/2007, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo