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

jQuery Discussion :

Attendre la fin d'un évenement - remplissage double liste select


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 24
    Par défaut Attendre la fin d'un évenement - remplissage double liste select
    Bonjour,

    Voici mon soucis :
    J'ai une liste B qui dépend de ma liste A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <select id="listA">
    </selec>
    <select id="listB">
    </selec>
    <input id="monInput" value="champs rempli sur l'event change de ma liste B"/>
    Quand je sélectionne un élément de ma liste A ça modifie ma liste B, qui rempli un champ input. Tout ceci fonctionne bien quand je le fais à la mano.

    Mon soucis se trouve lorsque je veux modifier la sélection de ma listeA et B en programmation.
    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
     
    $("#listA").on("change, function* (...
    // mon code qui charge ma listB à l'aide d'une requete asynchrone 
    );
     
    $(unbouton).on("click",function* (..){
    ...
     
    var a = data recup depuis un objet JSON;
    var b = data recup depuis un objet JSON;
     
    $(listA).val(a);
    $(listA).change(); //Déjà là je suis obligé de déclencher l'événement manuellement sinon ça ne fait rien
     
    $(listB).val(b);
    ...
    );
    Le soucis est que comme le .change() met un peu de temps à remplir ma liste B; mon instruction suivante ne peut pas sélectionner la valeur de ma liste B puisqu'elle n'est pas encore rempli...

    Avez vous une idée sur comment je peux faire pour "patienter" la fin de l'event ? (j'ai déjà tester des truc crade à base de sleep mais rien à faire étant donné que dans mon onChange j'ai de l'ascynchrone) peut être qu'il y a une solution à l'aide des promises/yield (chose que je ne maîtrise pas du tout) non ?

    Note : je pense aussi avoir un problème de conception du fait que je dois appeler manuellement .change() (je peux me montrer, et c'est peut etre une bonne facon de faire)

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Tout le problème vient du fait qu'il y a des instructions asynchrones dans ta fonction appelé au onchange. Par définition, une fonction asynchrone n'est pas bloquante, donc les instructions qui suivent s'exécutent avant.

    Parmi les solutions, il y a effectivement les promises/yield, mais la solution la plus simple reste une bête fonction callback passée en argument.

    Voici un tuto qui devrait t'aider : http://fguillot.developpez.com/tutor...s-avec-jquery/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 24
    Par défaut
    Merci, je suis entrain de regarder mais j'ai un soucis.

    Si je met un console.log dans ma fonction Change() et dans mon .done() pour voir :
    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
     
    ...on("change', wrapAsync(function* () {
     
    var result = yield get(...); //req. asynchrone
     
    console.log("c'est fini dans le change");
    })
    ); 
     
    ...
     
    function mafonction(){
     
    var result = monid.change().promise();
     
    result.done(function(){ console.log("c'est fini") });
    }
    Le résultat est :
    c'est fini
    c'est fini dans le change


    Donc en gros le callback ne foncitonne pas, il m'indique que c'est fini alors que pas du tout oO

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    yield et les promises sont à peine supportés, et les APIs et implémentations ne sont pas finalisées. Utilise plutôt une fonction callback ou la fonction $.when de jQuery

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 24
    Par défaut
    Bizarre, j'ai tout testé et rien y fait, le callback s'execute avant la fin de ma fonction.

  6. #6
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    1) merci de posté les question JQuery dans le forum JQuery

    2) je ne sais si c'est ton code que tu as posté mais si c'est le cas le simple fait que dans le forum il n'affiche tout en rouge signifie qu'il est symtaxiquement incorrect. corrige la syntaxe avant tout car sans ça impossible de savoir s'il y a des erreur.

    3) il existe sur les forum des 10ene d'exemple de code de liste liées.

    A+JYT

Discussions similaires

  1. Attendre la fin d'un évenement
    Par vico75018 dans le forum Flex
    Réponses: 3
    Dernier message: 29/10/2009, 00h31
  2. [Processus][pause] attendre la fin ?
    Par MrDuChnok dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 19/07/2004, 13h51
  3. attendre la fin d'un processus
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 27/02/2004, 15h37
  4. Attendre la fin du chargement de la page dans un WebBrowser
    Par core1 dans le forum Web & réseau
    Réponses: 5
    Dernier message: 15/06/2003, 04h12
  5. Comment Attendre la fin d'un Processus
    Par mr_titi dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/06/2003, 16h35

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