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 :

Deux fonctions ds le "OnChange" !


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut Deux fonctions ds le "OnChange" !
    Bonjour !

    Je sollicite votre attention pour un probleme que je n'arrive pas a resoudre sur l'evenement onchange d'une liste deroulante!

    En effet lorsque la valeur de la liste deroulante change je souhaite agir sur deux autres listes déroulantes.
    Je me suis inspiré du POST Ajax (sur les listes deroulantes) du forum.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    <select class="cellule" name='groupe' id='groupe' onchange='go_s();go_lst'>
    lors de l'execution IE me renvoi une erreur:

    Erreur: Erreur d'execution inconnue.

    De plus lorsque je selectionne un element de ma liste principale le resultat s'affiche pas dans la bonne zone ( c a dir : ds la liste deroulante 2 o lieu d'etre ds la liste deroulante 3)

    voici mes fonctions :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    // agir sur la liste deroulante 2 a partir de la liste 1
    function go_s()
    {
      getXhr();
      // On défini ce qu'on va faire quand on aura la réponse
      xhr.onreadystatechange = function(){
        // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
        if(xhr.readyState == 4 && xhr.status == 200)
        {
          leselect = xhr.responseText;
          // On se sert de innerHTML pour rajouter les options a la liste
          document.getElementById('sous_groupe').innerHTML = leselect;
        }
      }
      // Ici on va voir comment faire du post
      xhr.open("POST","AjaxSousGroupe.php",true);
      // ne pas oublier ça pour le post
      xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      // ne pas oublier de poster les arguments
      // ici, l'id du groupe
      sel = document.getElementById('groupe');
      id_g = sel.options[sel.selectedIndex].value;
      xhr.send("id_g="+id_g);
    }
     
    // agit sur la liste deroulante 3 a aprtir de la liste 1
    function go_lst()
    {
      getXhr();
      // On défini ce qu'on va faire quand on aura la réponse
      xhr.onreadystatechange = function(){
        // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
        if(xhr.readyState == 4 && xhr.status == 200)
        {
          leselect = xhr.responseText;
          // On se sert de innerHTML pour rajouter les options a la liste
          document.getElementById('liste_m').innerHTML = leselect;
        }
      }
      // Ici on va voir comment faire du post
      xhr.open("POST","AjaxListeNoSG.php",true);
      // ne pas oublier ça pour le post
      xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      // ne pas oublier de poster les arguments
      // ici, l'id du sous groupe
      sel = document.getElementById('groupe');
      id_l = sel.options[sel.selectedIndex].value;
      xhr.send("id_l="+id_l);
    }

    jespere qu'il y a assez d'elements afin que vous puissiez m'aider !!

  2. #2
    Membre régulier Avatar de delas
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 100
    Points : 95
    Points
    95
    Par défaut
    'lut

    t'as pas oublié les parentheses derriere go_lst?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select class="cellule" name='groupe' id='groupe' onchange='go_s();go_lst()'>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    ah oui effectivement elle n'y sont pas ds le bout de code posté mais ds mon code elle y sont bien et ca bug ... lol

  4. #4
    Invité
    Invité(e)
    Par défaut
    salut

    essaye sous Firefox, la console nous en dira plus que le superbe "Erreur d'exécution inconnue" d'IE

    l'erreur vient peut-être du fait que tu utilises la même variable globale dans 2 fonctions appelées très rapidement à la suite l'une de l'autre... mais je ne suis pas sûr du tout...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    lut !

    je vais testé pour voir avec firefox !

    On m'a aussi conseillé de mettre ma deuxieme fonction ds un autre evenement le Onblur !

    Résultat : il n'y a plus d'erreur mais la liste 3 ne se met a jour seulement a la perte du focus !

    savez-vous comment faire pour envoyer le focus a un autre controle ??

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    je viens de rajouter une ligne a la fin de ma fonction afin que le focus soit transmis a une autre liste mais ca ne fait rien :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    // agit sur la liste deroulante 2 a partir de la liste deroulante 1
    function go_s()
    {
      getXhr();
      // On défini ce qu'on va faire quand on aura la réponse
      xhr.onreadystatechange = function(){
        // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
        if(xhr.readyState == 4 && xhr.status == 200)
        {
          leselect = xhr.responseText;
          // On se sert de innerHTML pour rajouter les options a la liste
          document.getElementById('sous_groupe').innerHTML = leselect;
        }
      }
      // Ici on va voir comment faire du post
      xhr.open("POST","AjaxSousGroupe.php",true);
      // ne pas oublier ça pour le post
      xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      // ne pas oublier de poster les arguments
      // ici, l'id du groupe
      sel = document.getElementById('groupe');
      id_g = sel.options[sel.selectedIndex].value;
      xhr.send("id_g="+id_g);
      
      // on donne le focus a la liste deroulante 3
      document.getElementById('liste_m').focus();
    
    }
    faut-il que je mettent ce bout de code ds le fichier AjaxSousGroupe.php ??

  7. #7
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Essaie déjà de corriger la faute AJAX de ton code (voir ici ou la)
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    Oui je viens d'y jeter un coup d'oeil avant que tu poste cela !

    J'ai bien remplacé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    getxhr(); 
     
    par
     
    xhr = getxhr();
    mais ca me donne de nouveau un erreur d'execution

    j'ai meme donné des nom differents pour chak fonction (se qui ne sert a rien) mais pour tester ! rien de mieu

    l'erreur qui se produit est au niveau de ma deuxieme fonction :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    function go_lst()
    {
    
      var xhr = getXhr();
      // On défini ce qu'on va faire quand on aura la réponse
      xhr.onreadystatechange = function(){
        // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
        if(xhr1.readyState == 4 && xhr.status == 200)
        {
          leselect = xhr.responseText;
          // On se sert de innerHTML pour rajouter les options a la liste
          document.getElementById('liste_m').innerHTML = leselect;
        }
      }
      // Ici on va voir comment faire du post
      xhr.open("POST","AjaxListeNoSG.php",true);
      // ne pas oublier ça pour le post
      xhr1.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      // ne pas oublier de poster les arguments
      // ici, l'id du sous groupe
      sel = document.getElementById('groupe');
      id_l = sel.options[sel.selectedIndex].value;
      xhr.send("id_l="+id_l);
    }
    IE ne reconnait pas l'objet .??

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    Yéééé! ca y est enfin ca marche !

    Effectivment faut bien lire les post avant de poter ! le pb est recurant je vois mais bon .....

    En tout cas merci !

  10. #10
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par lecail65
    Yéééé! ca y est enfin ca marche !

    Effectivment faut bien lire les post avant de poter ! le pb est recurant je vois mais bon .....

    En tout cas merci !
    Récurant, c'est le cas de le dire

    Bonne continuation
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  11. #11
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    merci pour lexplication

+ Répondre à la discussion
Cette discussion est résolue.

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