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 :

Fonction en 2 temps


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Fonction en 2 temps
    Bonjour,

    Après pas mal de recherche infructueuse je me tourne vers vous, vous êtes mon dernier espoir

    Je vous explique mon soucis, je développe un formulaire qui comporte uniquement 2 champs saisie et un bouton submit qui me permet de calculer un itinéraire (via la librairie mappy).

    Je souhaiterai réaliser un système équivalent à mappy.fr lors du calcule d'un itinéraire. C'est à dire que l'user complète les champs et clique sur le bouton. Mappy propose, par champ, une liste de destination que l'user doit sélectionner pour que mappy calcule l'itinéraire.

    Pour le moment tout mon script s'exécute correctement sans effectuer de pause, c'est à dire que j'affiche une liste de proposition sous mes 2 champs mais l'itinéraire est calculé. Je suis obligé de re-cliqué sur le bouton submit pour que mon script prenne en compte les changement.

    L'idée est donc de créer une "pause" après que l'utilisateur ai cliqué sur le bouton afin qu'il puisse sélectionner la destination qu'il souhaite dans chacun des 2 champs puis de calculer l'itinéraire.

    Il faut savoir que la liste de proposition et générer dynamiquement par ces 2 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
    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
    function alerte(sId ,champ, results, i){
                    //Affectation de la nouvelle valeur dans le champ
    		document.getElementById(champ).value = results;
                    //Suppression des propositions
    		delete_li(sId);
                    //On place l'adresse choisie dans un array
    		tab[i] = results;
    }
     
     
    function add_li(sId, results, champ, i) {
    	var oUl = document.getElementById(sId); // récupération de la liste
    	var iLength = oUl.getElementsByTagName("li").length; // longueur de la liste (nombre d'items)
    	var oLi = document.createElement("li") // on cré un nouveau noeud item de liste
            //Création d'un événement sur le li crée
    	oLi.setAttribute('onClick', 'alerte("'+sId+'","'+champ+'","'+results+'", "'+i+'")');
            //Affectation d'une class pour le css.
    	var math = Math.round(iLength/2);
    	if(iLength == 0 || iLength/2 == math){
    		oLi.setAttribute('class', 'ac_impair');		
    	}
    	else{
    		oLi.setAttribute('class', 'ac_pair');
    	}	
    	var oText = document.createTextNode(results); // on créer un noeud texte
    	oLi.appendChild(oText); // on attache le noeud texte au noeud item de liste
    	oUl.appendChild(oLi); // on attache le noeud item de liste au noeud liste
    	return oLi;
    }
     
     
     
    function search_Adresse(champ, divAffichage, j) {
            //récupération de l'adresse dans le champ
    	var adresse = document.getElementById('Way'+champ).value;
    	var oLi;
            //Création d'un nouvel objet geocoder via l'api mappy
    	var geo = new Mappy.api.geolocation.Geocoder();
            //Création d'une liste de proposition sous le champ "champ"
    	geo.geocode(adresse, function(results){
    								if(results.length != 1)
    								{
    									for(var i = 0;i <= results.length + 1; i++)
    									{
    										add_li(divAffichage, results[i].Placemark.name, 'Way'+champ, j);										
    									}				
    								}
    								}, 
    								function(e){
    									alert(e);
    								});
     
    }
    j'éspère avoir était clair sur mon petit problème et que vous saurez m'aider.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Je suis obligé de re-cliqué sur le bouton submit pour que mon script prenne en compte les changement.

    Ajax !!!
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Merci pour votre réponse, mais pourriez vous être un peu plus clair sur l'utilisation d'Ajax dans mon code? Car, si j'ai bien compris l'utilisation d'ajax, ajax permet d'obtenir des réponses du serveur en asynchrone ou synchrone, donc soit le script n'attend pas la réponse du serveur soit le script attend la réponse. Mais dans mon cas j'ai du mal a imaginer la requête que je doit envoyer au serveur.

    La liste de proposition (array) est retournée par une fonction que l'api mappy me fourni, à savoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            var geo = new Mappy.api.geolocation.Geocoder();
    	geo.geocode(adresse, function(results){ ....}, function{erreur});
    Comment je doit utiliser Ajax en mode synchrone dans ce cas?

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    cette fonction API doit déja etre de l'ajax non ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 13
    Points
    13

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    donc pas de rechargement de page ???
    et a toi de trouvé ou tu recupères la reponse...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    En fait, je récupère déjà la réponse, c'est une liste d'adresse que je place dans une succession de balise LI, afin que l'utilisateur puisse choisir l'adresse qu'il souhaite. Mon soucis, c'est que le script n'attend pas que l'utilisateur corrige son adresse, en sélectionnant une adresse dans la liste que je lui propose, pour calculer l'itinéraire.

    Un exemple:
    L'utilisateur souhaite faire un chemin entre Lille est paris.
    Il saisit donc Lille dans le 1er champ et Paris dans le 2nd, puis clique sur le bouton afin d'afficher le chemin entre ces 2 villes.
    Comme il existe plusieurs Lille, un champ apparait avec les différente possibilitée
    Lille 59000, 59800, 59150
    Lille 2275
    Lille sauvagnas etc..

    Idem pour Paris

    On sélectionne les adresses voulue puis il faut re-cliquer sur le bouton afin de calculer le chemin entre les 2 adresses choisis.
    Hors je souhaite cliquer qu'une seule fois sur le bouton...

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    il doit y avoir un parmètre concerant la synchro
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Eh bien dans la description de la méthode geocode de la Classe Mappy.api.geolocation.Geocoder, il est précisé que la requête est effectuée en mode asynchrone.
    Est-ce que cela veux dire que je doit traiter ma liste dans cette méthode?? et dans tel cas comment je fait pour "stopper" le script pour que l'utilisateur puisse choisir son adresse..
    Est-ce que par hasard, lorsqu'une erreur est détectée on sort du script?

    Dans cette configuration est-il possible d'afficher une liste d'adresse pour le champ d'affecter un événement onclick sur cette liste qui relance le script juste avant l'erreur?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Une petite question:

    Lorsque l'on a une fonction de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    geo.geocode(adresse, function(success), function(error));
    où est-il possible de récupérer la valeur retourner par function(sucess)??

Discussions similaires

  1. Fonction de coherence temps fréquence
    Par olala dans le forum Signal
    Réponses: 0
    Dernier message: 29/01/2008, 13h18
  2. Comment utiliser 2 fonctions en meme temps ?
    Par kilian67 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/10/2007, 22h35
  3. Executer plusieurs fonctions en meme temps ?
    Par bilou95 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/05/2007, 11h35
  4. lancer deux fonctions en même temps
    Par youp_db dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/09/2006, 12h11
  5. Réponses: 3
    Dernier message: 11/07/2006, 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