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 émérite 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
    Points : 2 953
    Points
    2 953
    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.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

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

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    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 : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    y a quoi comme chaine dans ton responseText ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  4. #4
    Membre émérite 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
    Points : 2 953
    Points
    2 953
    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.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    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
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  6. #6
    Membre émérite 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
    Points : 2 953
    Points
    2 953
    Par défaut
    Je ne vois pas de quel indice et de quelle boucle tu parles. (Normal dans ma tête c'est correct)
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    ca serais t y pas une boucle ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  8. #8
    Membre émérite 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
    Points : 2 953
    Points
    2 953
    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.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    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
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  10. #10
    Membre émérite 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
    Points : 2 953
    Points
    2 953
    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.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    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 ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  12. #12
    Membre émérite 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
    Points : 2 953
    Points
    2 953
    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)
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    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
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  14. #14
    Membre émérite 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
    Points : 2 953
    Points
    2 953
    Par défaut
    C'est exactement ce que j'ai fait! j'ai réutilisé ma variable test justement.
    Merci pour ton aide.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

+ 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