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 :

Lancer plusieurs fonctions JavaScript sur même evenement


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut Lancer plusieurs fonctions JavaScript sur même evenement
    j'utilise actuellement AJAX afin de mettre à jour une case d'un tableau après avoir sélectionné un choix dans un menu déroulant.
    Je voudrais encore le faire pour une autre case lorsque cette même liste déroulante change. Voici mon code avant le changement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        <div id='selectSerie'>
          <select name="selectSerie" class="MDNomSerie" id="selectSerie2" onchange='GetListeNumSeries()'>
              <option value="" selected></option>
            <?php    if (!isset($flag)){
            $res1 = mysql_query("SELECT DISTINCT nomSerie FROM seriedeprix WHERE ID_Entreprise = '".$row_SelectEntAuto['ID_Entreprise']."'");
            while($row1 = mysql_fetch_assoc($res1)){
                echo "<option value='".$row1["nomSerie"]."'>".$row1["nomSerie"]."</option>";
                $flag=1;
                }
            }?>
                </select>
        </div>
    Maintenant pour que les deux cases changent sur le même evenement, j'ai essayé ça:

    <select name="selectSerie" class="MDNomSerie" id="selectSerie2" onchange='GetLibelle1();GetListeNumSeries()'>

    Mais malheureusement ça ne marche pas, seule GetListeNumSeries() est pris en compte!
    (bien sûr j'ai testé GetLibelle1 tout seul et ça fonctionne bien.
    Merci de votre aide

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ca dit pas grand chose...

    Pourrais tu mettre le par exemple le code des fonctions ainsi que le code du tableau pour voir s'il y a bien les appels des bons td

    Sinon les fonctions font appel à la bdd ?
    As tu essayé de mettre un delai entre les 2 fonctions histoire de voir s'il y a pas de problème sur le temps d'execution ou autre ??

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    Les fonctions JS:

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    var xhr = null; 
     
                function getXhr(){
                    if(window.XMLHttpRequest) // Firefox et autres
                       xhr = new XMLHttpRequest(); 
                    else if(window.ActiveXObject){ // Internet Explorer 
                       try {
                                xhr = new ActiveXObject("Msxml2.XMLHTTP");
                            } catch (e) {
                                xhr = new ActiveXObject("Microsoft.XMLHTTP");
                            }
                    }
                    else { // XMLHttpRequest non supporté par le navigateur 
                       alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
                       xhr = false; 
                    } 
                }
     
     
    function GetListeNumSeries(){
                    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){
                            leselect1 = xhr.responseText;
                            // On se sert de innerHTML pour rajouter les options a la liste
                            document.getElementById('selectNumSerie').innerHTML = leselect1;
                        }
                    }
     
                    xhr.open("POST","AjaxNumSerie.php",true);
                    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
                    sel2 = document.getElementById('selectEntreprise');
                    entreprise = sel2.options[sel2.selectedIndex].value;
     
                    sel3 = document.getElementById('selectSerie2');
                    serie = sel3.options[sel3.selectedIndex].value;
     
                    xhr.send("serie="+serie+"&entreprise="+entreprise);
                }
     
                function GetLibelle1(){
                    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('Libelle1').innerHTML = leselect;
                        }
                    }
     
                    xhr.open("POST","AjaxLibelle1.php",true);
                    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
                    sel = document.getElementById('selectSerie2');
                    serie = sel.options[sel.selectedIndex].value;
                    alert(serie);
                    xhr.send("serie="+serie);
                }
    Et les balises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <td class="caseSerieNum" id="selectNumSerie" rowspan="2">test</td>
    .....
    <td class="caseTitreBordureH" id="Libelle1" colspan="5">&nbsp;</td>
    Le fichier AjaxLibelle1.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    <?php
    echo '<td class="caseTitreBordureH" id="Libelle1" colspan="5">';
    /*if (($_POST['serie']) != "Travaux de terrassements pour branchements")
    {*/
        echo "Etude et gestion de dossier";
    //}
    echo '</td>';
    ?>
    Le fichier AjaxNumSerie.php:

    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
     
    <?php
    // Connection à la base de données
    $hostname_serveur="";
    $database_serveur = "***";
    $username_serveur = "***";
    $password_serveur = "***";
    $serveur = mysql_pconnect($hostname_serveur, $username_serveur, $password_serveur) or trigger_error(mysql_error(),E_USER_ERROR); 
    mysql_select_db($database_serveur, $serveur);
     
        echo "<td class='caseSerieNum' name='selectNumSerie' id='selectNumSerie' rowspan='2'>";
        if(isset($_POST["serie"])){
     
            $res2 = mysql_query("SELECT serie FROM seriedeprix WHERE ID_Entreprise = '".$_POST["entreprise"]."' AND nomSerie = '".$_POST["serie"]."'");
            $row2 = mysql_fetch_assoc($res2);
            echo $row2['serie'];
        }
     
        echo "</td>";
    ?>
    Sinon je n'ai pas essayé de temporiser je ne sais même pas comment faire :p

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Pour temporiser essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeOut(GetListeNumSeries(),3000);
    3000 = 3sec il me semble

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    Très bien merci je vais essayer ca

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    Oui donc la fonction est:

    setTimeout("GetListeNumSeries();",3000);

    Sinon ça marche maintenant mais ça me pose un petit problème tout de même!

    J ai environ 40 listes déroulantes et quelques autres champs à remplir à l aide d AJAX. J'ai mis un timer de 100, c'est à dire un dixième de seconde, mais ça prend beaucoup de temps, on peut même suivre la mise à jour des listes en direct...
    Et le timer de 100 est quelquefois trop court, car certaines de mes listes sont sautées (peut être dû à un lag serveur) et donc ne se remplissent pas.
    Y a t'il une fonction qui permettrait de lancer la suivante tant que celle en cours n'est pas terminée?

  7. #7
    Membre du Club Avatar de Thauglor
    Homme Profil pro
    Ingénieur conception et développement
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur conception et développement
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 64
    Points
    64
    Par défaut
    je vais surement dire une connerie plus grosse que moi, mais pourquoi tu n'appelle pas une fonction a ton evenement qui va elle appele toutes les fonctions dont tu as besoin une par une, orddonnancé comme tu veu et avec els tempo que tu veu...

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    Le problème est que si je les lance comme cela:

    Fonction1();
    Fonction2();
    etc...

    Ben les fonctions ne sont pas toutes parcourues. Les fonctions se lancent toutes mais ne se terminent pas (à cause du xhr.send je pense)

    Je pense qu'il doit exister quelquechose qui contrôle la fin de l'exécution d'une fonction, mais je ne la trouve pas :/

    J'ai essayé avec des return, mais sans succès, dès qu'il rentre dans le return il doit arrêter l'execution de xhr.send et donc ma requête n'a pas le tps de s'exécuter!

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    Bon et bien j'ai trouvé comment m'y prendre, au lieu de faire un send() pour chaque liste déroulante, je fais un send pour toute ma table qui contient mes listes déroulantes, ça va me demander un peu de temps en plus mais au moins il n'y aura plus de problème de lenteur de chargement ou d'oubli de listes

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 46
    Points : 34
    Points
    34
    Par défaut
    Salut davinout, tu as placé ou ta fonction "setTimeout" sur ton code ci dessous pour que ça marche, j'ai le même souci que toi et je n'arrive pas à résoudre mon problème à l'aide de cette fonction.

    Merci par avance

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

Discussions similaires

  1. Lancer plusieurs fonctions JavaScript
    Par tijocanard dans le forum jQuery
    Réponses: 2
    Dernier message: 09/03/2012, 09h49
  2. Plusieurs fonctions javascript dans un même fichier js
    Par SALISTASE dans le forum ASP.NET
    Réponses: 16
    Dernier message: 20/05/2009, 10h51
  3. Réponses: 1
    Dernier message: 17/06/2008, 17h23
  4. [VBS] Lancer plusieurs script dans le même interpréteur
    Par intrud3r dans le forum VBScript
    Réponses: 4
    Dernier message: 12/07/2006, 15h26
  5. [PHP-JS] comment lancer une fonction javascript a partir de php
    Par amika dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/06/2005, 19h23

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