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 :

jQuery et trigger (geocomplete)


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut jQuery et trigger (geocomplete)
    Bonjour à tous,

    J'ai trouvé ce plugin jQuery GeoComplete qui permet d'utiliser les cartes google Maps => http://ubilabs.github.io/geocomplete/
    En gros, j'ai un input, dans lequel on tape un lieu, plusieurs options s'offrent à nous, on en sélectionne une et puis voilà.
    J'ai donc mis en place un lien à côté qui permet d'afficher la carte au clique.
    Le souci c'est que je veux vérifier au clique, que l'adresse rentrée est valide (en gros que l'utilisateur n'a pas tapé : "sdyfgqfgyefgryefgekjfghesgfgerjhezfhe" dans le champ input).
    J'ai donc mis (comme indiqué dans le tuto) un trigger sur l'élement geocomplete qui permet de savoir si oui ou non l'adresse est valide.
    Et au clique sur ma carte, je veux vérifier le résultat, seulement le résultat du trigger est trop long, et ne me permet pas de capter le retour.

    Voici ce que j'ai écrit :

    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
    var reset = function() {
        $("#location").geocomplete().live('geocode:result', function(event, status) { //si un resultat s'affiche, pas d'erreur
            $('#erreur_location').html('non');
        }).live('geocode:error', function(event, status) { //sinon erreur
            $('#erreur_location').html('oui');
        });
        $("#getLocation").live('click', function() { //clique pour afficher la carte
            $('#location').trigger('geocode'); //appelle du trigger ci-dessus
            //c'est la que ça va surement trop vite
            erreur = $('#erreur_location').html(); //récuperation de l'erreur ci-dessus
            if (erreur == 'non') {
                ...
            } else {
                ...
            }
    .....
    Comment puis-je réussir à attendre tant que j'ai pas reçu la réponse du trigger ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 417
    Par défaut
    Bonjour,

    Je ne peux pas te répondre sur ce plugin en particulier mais d'une manière générale et au cas où tu ne connaîtrais pas cette fonction on utilise souvent deferred pour attendre le résultat d'un évènement.

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Merci pour ta réponse, en fait je pense que le plugin n'a rien à voir. J'ai regardé ta fonction mais je pense qu'il doit y avoir quelque chose de beaucoup plus simple qui existe. En fait, j'aimerai juste que le trigger récupère la valeur du bind.
    Parce que si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $("#geocomplete").geocomplete()
            .bind("geocode:result", function(event, result){
    		alert('ok');
            })
            .bind("geocode:error", function(event, status){
    		alert('erreur');
            })
            $("#find").click(function(){
    		$("#geocomplete").triggerHandler("geocode");
            });
     });
    J'arrive bien à chaque fois à avoir "ok" ou "erreur" au bon moment.
    J'aimerai qu'en dessous de la ligne $("#geocomplete").triggerHandler("geocode");, je puisse récupérer le "ok" ou le "erreur" c'est tout

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Je ne connaissais pas, je viens de tester.

    Je ne comprends pas ce que vous voulez améliorer au fonctionnement de l'exemple de base. L'autocomplete fonctionne très bien, et la zone de résultat affiche un commentaire adéquat.

    je puisse récupérer le "ok" ou le "erreur" c'est tout
    Vous pouvez toujours ajouter un traitement en cas de succès ou d'échec en utilisant le code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        $geo
            .geocomplete( options )
            .on( "geocode:result", function( event, result ){
                $.log("Resultat : " + result.formatted_address);
                // OK : code supplémentaire ou appel de fonction
            })
            .on( "geocode:error", function( event, status ){
                $.log("Erreur : " + status);
                // Erreur : code supplémentaire ou appel de fonction
            })
            .on( "geocode:multiple", function( event, results ){
                $.log( "Résultat multiple : " + results.length + " results found" );
            });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    En fait le souci, c'est que j'appelle plusieurs fois et de plusieurs fonctions différentes ce trigger.
    J'ai une fonction qui prend en compte 6 ou 7 paramètres, et je ne peux pas tous les passer dans le trigger :
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function addEvent(day1, month1, year, body1, user, titre1, lieu, heure, minute, privated) {
        ...
        $("#geocomplete").triggerHandler("geocode");
        if () { 
              // si le retour du trigger n'est pas en erreur on continue....
              // ajout de l'évènement...
        } else {
              alert('erreur : lieu invalide');
        }
        ...
    }
    Ou encore comme dessus l'exemple ou on clique sur la carte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $("#getLocation").live('click', function() { //clique pour afficher la carte
            $('#location').trigger('geocode'); //appelle du trigger ci-dessus
            //c'est la que ça va surement trop vite
            erreur = $('#erreur_location').html(); //récuperation de l'erreur ci-dessus
            if (erreur == 'non') {
                ...
            } else {
                ...
            }
    Donc la seule solution que je vois, et qui ne me paraissait pas si impossible, c'est de récupérer d'une manière ou d'une autre le résultat du trigger et d'attendre ce dernier avant de continuer :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     $("#location").geocomplete().live('geocode:result', function(event, status) { //si un resultat s'affiche, pas d'erreur
            retour = true;
        }).live('geocode:error', function(event, status) { //sinon erreur
            retour = false;
        });
     $("#geocomplete").triggerHandler("geocode");
        if (retour) { // catch de la réponse
              ...
        } else {
              alert('erreur : lieu invalide');
        }
    });

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    On peut passer par un objet intermédiaire, que l'on doit réinitialisé avant l'action.

    Code de mon exemple modifié pour inclure l'objet $geoResultat :

    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
    64
    65
    66
    67
    $( function(){
     
        var options = {
                "map" : ".map_canvas",
                "location" : "Paris"
            },
            $logger = $( "#logger" ),
            $geo = $( "#geocomplete" ),
            $geoResultat = {
                "init" : function(){
                    $( this ).result = {};
                    $( this ).statut = "OK";
                },
                "result" : {},
                "status" : "OK"
            };
     
        $.log = function( message ){
            $logger.html( message );
        };
     
        $geo
            .geocomplete( options )
            .on( "geocode:result", function( event, result ){
                $.log("Resultat : " + result.formatted_address);
     
                $geoResultat.result = result;
            })
            .on( "geocode:error", function( event, status ){
                $.log("Erreur : " + status);
     
                $geoResultat.status = status;
            })
            .on( "geocode:multiple", function( event, results ){
                $.log( "Résultat multiple : " + results.length + " results found" );
            });
     
            $( "#find" ).on( "click", function(){
     
                // init : valeur par défaut
                $geoResultat.init();
     
                // action
                $geo.trigger( "geocode" );
     
                // résultat
                console.log( $geoResultat.result, $geoResultat.status );
            });
     
            $( "#examples a" ).on( "click", function(){
     
                // init : valeur par défaut
                $geoResultat.init();
     
                // action
                $geo
                    .val( $( this ).text() )
                    .trigger( "geocode" );
     
     
                // résultat
                console.log( $geoResultat.result, $geoResultat.status );
     
                return false;
            });
     
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

Discussions similaires

  1. Trigger jQuery et simulation keypress
    Par Turbulator dans le forum jQuery
    Réponses: 4
    Dernier message: 22/12/2011, 11h46
  2. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  3. Trigger ??
    Par XDeus dans le forum Développement
    Réponses: 6
    Dernier message: 31/03/2003, 09h44
  4. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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