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 :

Script qui s'exécute 2 fois!


Sujet :

JavaScript

  1. #1
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut Script qui s'exécute 2 fois!
    Salut,

    J'essaie de remplir dynamiquement une liste déroulante suite à une requête HTTP. Cette requête me retourne une réponse correcte. Seulement le script est exécuté 2 fois sans raison apparente. Si je place une alert() n'importe où dans le script, il ne s'exécute qu'une fois!!!

    Le résultat c'est que ma liste est doublée. D'ailleurs on le constate avec ma variable test initialisée à 0 et incrémentée dans la fonction appelée par l'évènement (SendQuery).
    Si j'ai une alert test = 1, si je n'en mets pas test passe à 2!
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="List0" class="saisie" size=10  maxlength="8" ID="Text8" onkeyup="SendQuery(this.value);">
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    /***********************************************/
    /****			Liste emploi				****/
    /***********************************************/
    function Initialize() {
    	try {
    		req= new ActiveXObject("Msxml2.XMLHTTP");
    	} catch(e) {
    		try {
    			req = new ActiveXObject("Microsoft.XMLHTTP");
    		} catch(oc) {
    			req=null;
    		}
    	}
     
    	if(!req &&typeof XMLHttpRequest!="undefined") {
    		req = new XMLHttpRequest();
    	}
    }
    var test = 0;
    function SendQuery(arg) {
    	if (arg!="" && arg.length==8) {
    		test++;
    		Initialize();
    		var url = "emploi_lst.asp?arg=" + arg;
    		if (req!=null) {
    			req.onreadystatechange = Process;
    			req.open("GET", url, true);
    			req.send(null);
    		}
    	} else {
    		HideEmploi();
    	}
    }
     
    function Process() {
    	if (req.readyState == 4) {
    		if (req.status == 200) {
    			if(req.responseText=="") {
    				HideEmploi();
    			} else {
    				ShowEmploi();
    				AffEmploi(req.responseText);
    			}
    		}/* else {
    			document.getElementById("Emploi0").innerHTML = "Un problème internet est survenu:" + req.statusText;
    		}*/
    	}
    }
     
    function HideEmploi() {
    	document.getElementById('Emploi0').style.display = "none";
    	document.getElementById('emploi_saisi').style.display = "none";
    }
     
    function ShowEmploi() {
    	document.getElementById('Emploi0').style.display = "";
    	document.getElementById('emploi_saisi').style.display = "";
    }
     
    function AffEmploi(requete) {
    	var tab = requete.split("##");
    	var exist = eval(tab[0]);
    	var id = eval(tab[1]);
    	var lib = eval(tab[2]);
     
    	if (id[0] && lib[0]) {
    		var element = document.createElement("option");
    		element.appendChild(document.createTextNode(''));
    		element.value = 0;
    		document.getElementById('Emploi0').appendChild(element);
    		for (i in id) {
    			var element = document.createElement("option");
    			element.appendChild(document.createTextNode(lib[i] +' '+ test)); // ON CONSTATE ICI QUE TEST RESTE A 1 OU PASSE A 2
    			element.value = id[i];
    			document.getElementById('Emploi0').appendChild(element);
    		}
    	} else {
    		document.getElementById('Emploi0').removeChild();
    		HideEmploi();
    	}
    }
    Voyez-vous ce qui ne va pas?

    Merci par avance.

    note: le code n'est pas fini, veuillez s'il vous plaît ne pas vous attarder sur d'autres problèmes éventuels.

  2. #2
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    Bonjour,

    J'ai essayé vite fait ton code , et je ne suis pas sur d'avoir tout compris de ce que tu demandes.

    En attendant le pb ne peut il pas venir du fait que dans ta fonction SendQuery , il y a à la fois un open puis un send , et peut être que la requête est envoyée 2 fois à ce moment là ?

  3. #3
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    y a quoi comme chaine dans ton responseText ?

  4. #4
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Merci de vous intéresser à mon problème.

    siddh > voici ce qu'il y a dans responseText
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1##new Array("3-1","3-2","3-8","3-6","3-3","3-7","3-5","3-4","3-9")##new Array("Animateur","Animateur technicien, professeur","Comptabilité et gestion","Directeur, resp.de service admin.","Formateur","Information et communication","Personnel pédagogique occasionnel","Responsable de secteur, de service ou d\\'équipement","Secrétariat, accueil, personnel administratif")
    elitost > je ne suis pas expert mais cela semble être la procédure normale.

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    dans la mesure ou ton tableau contient plusieurs elements c est peut etre normal que ton indice de parcours soit plus grand que 1 non ? tu fais une boucle ca me semble logique

  6. #6
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Je ne vois pas de quel indice et de quelle boucle tu parles. (Normal dans ma tête c'est correct)

  7. #7
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    ca serais t y pas une boucle ?

  8. #8
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Oui une boucle sur le tableau id et c'est donc normal. As-tu vu où j'incrémente ma variable test? Je l'incrémente dans SendQuery et non dans la boucle.
    Or mon problème est que j'appelle normalement SendQuery qu'une fois. Je devrais avoir test = 1 malheureusement j'ai test = 2.
    Ce que tu vois dans la boucle n'est qu'une concaténation.

  9. #9
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (arg!="" && arg.length==8) {
    visiblement tu test la longueur de l'argument, j'en deduit que tu lui passe une chaine que tu tapes au clavier.

    le onkeyup se declanchera donc plusieurs fois et executera donc plusieurs fois ta methode

  10. #10
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Désolé mais je ne vois pas. Ma fonction ne s'exécute QUE quand la chaîne à une longueur de 8. Quels autres cas vois-tu?
    Je pense que tu n'as pas saisie mon problème. Le script s'exécute 2 fois et seulement 2 fois et non n fois qui pourraient provenir du onkeyup ou de la boucle for.

  11. #11
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    oui autant pour moi, on va dire que j etais pas reveillé

    la franchement c'est bizarre ton truc,
    a tout hasard, tu validerais pas par entrée ou en faisant une tabulation ?
    ce qui expliquerais le onkeyup et que ca reste a 8 chars ?

  12. #12
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Bien joué c'est exactement ça. Je faisais mon test avec un copier/coller (directement la valeur à 8 caracètres). Mais si je m'amuse à taper sur la barre espace plusieurs fois j'ai ma liste qui apparaît autant de fois que que j'ai tapé espace (j'ai un maxlength=8 pour expliquer le phénomène).

    T'es meilleur le matin que le soir .

    Maintenant faut que je réflechisse comment contrer ça. Si t'as une idée, je suis preneur. En sachant qu'à la base je souhaite remplir ma liste quand le champs atteint 8 caractères sans valider quoique ce soit (entrée ou tabulation comme tu l'as dit)

  13. #13
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    peut etre en te mettant un flag a tester.

    tu te met un booleen a false que tu met a true des que t as 8 chars et tu rajoutes un test dessus.

    si 8 char et flag false alors tu execute ton truc sinon return

  14. #14
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    C'est exactement ce que j'ai fait! j'ai réutilisé ma variable test justement.
    Merci pour ton aide.

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

Discussions similaires

  1. Script qui s'exécute seul régulièrement
    Par xess91 dans le forum Langage
    Réponses: 1
    Dernier message: 02/09/2009, 21h15
  2. code qui s excute une fois
    Par sisna dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 20/08/2008, 11h35
  3. Réponses: 8
    Dernier message: 16/03/2007, 16h43
  4. Réponses: 1
    Dernier message: 12/03/2007, 19h56
  5. Script qui s'exécute deux fois ?
    Par ben53 dans le forum Langage
    Réponses: 1
    Dernier message: 29/01/2007, 15h56

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