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 :

Un select, une boucle PHP et un onChange : galère


Sujet :

JavaScript

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Un select, une boucle PHP et un onChange : galère
    Bonjour à tous,

    Ce post est mi javascript, mi php.

    Soit un simple SELECT dont les OPTION sont générés avec une boucle qui parcourt une table mysql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql = mysql_query("SELECT id, nom, critere FROM table order by id");
    <select name="select" onChange="fonction(le param est dans la boucle)">
    while($row = mysql_fetch_assoc($sql)){ // debut de la boucle
    echo "<option value='".$row['id']."'>".$row['nom']."</option>";
    }
    </select>
    Comme vous le voyez dans ce bout de code, le select récupère les id de la table. Cependant, le problème est que j'ai besoin de mettre un onChange sur ce select (sachant qu'on ne peut pas mettre d'évènement JS sur les OPTION). Ce onChange appelerait une fonction JS qui masquerait ou afficherait un DIV selon son paramètre. Or ce paramètre est le champ "critere" de la table...et il n'est lu que dans la boucle, soit après la balise SELECT...
    Comment faire ? J'ai pensé à faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <select name="select" onChange="fonction(this.value)">
    while($row = mysql_fetch_assoc($sql)){ // debut de la boucle
    echo "<option value='".$row['id']."*".$row['critere']."'>".$row['nom']."</option>";
    }
    </select>

    Puis dans la fonction JS, un genre d'explode sur la caractère * qui me permettrait de récupérer la valeur de "critere" et d'effectuer le traitement.
    Mais quelqu'un aurait-il une soluce plus élégante ?
    Je l'en remercie d'avance.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Tu peux rajouter ton élément critère en tant qu'attribut de tes options :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = mysql_query("SELECT id, nom, critere FROM table order by id");
    <select name="select" onChange="fonctionOnChange(this)">
    while($row = mysql_fetch_assoc($sql)){ // debut de la boucle
    echo "<option value='".$row['id']."' critere='".$row['critere']."'>".$row['nom']."</option>";
    }
    </select>
    Alors, le w3c ne validera peut-être pas ton document HTML car l'attribut critere n'existe pas, mais bon...

    Et ensuite, tu peux récupérer l'attribut de cette façon lorsque tu itères les options :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fonctionOnChange(select)
    {
        var options = select.getElementsByTagName("option");
        for (var i=0;i<options.length;i++)
        {
            critere = options[i].attributes.getNamedItem("critere").value;
            // ou 
            critere = options[i].attributes.getAttribute("critere");
        }
    }
    A+

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci de ta réponse.
    La piste est bonne, il me semble. Plutôt que critere="...." , je peux peut-^tre essayer id="" ou name="" ...
    Je teste et je te dis...

Discussions similaires

  1. Petit souci sur une boucle PHP
    Par ns_deux dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 30/03/2009, 20h31
  2. [MySQL] Requetes SQL dans une boucle PHP
    Par Siteac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2006, 14h35
  3. [Smarty] Affectation dans une boucle PHP
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/08/2006, 09h30
  4. Réponses: 4
    Dernier message: 17/01/2006, 19h17
  5. [Performance] LEFT JOIN vs SELECT dans une boucle (PHP)
    Par frochard dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/10/2005, 17h45

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