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 :

Pré-afficher une variable


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut Pré-afficher une variable
    Bonjour, voilà ma question va peut-être paraître bête, bref le plus simple est de vous montrer mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	var bbb = new Array();
    	bbb = $$('select.super-attribute-select');
    	for(var y=0; y<bbb.length; y++){
    		bbb[y].onchange = function(){maj_options_conf(y);}
    	}
    En clair j'assigne un évènement sur chaque élément de bbb.
    Par contre, qu'importe l'élément qui est déclenché, la variable y passée en paramètre sera toujours la dernière valeur de la boucle (j'imagine que comme l'appel de fonction est éxécuté après les boucles et donc y est traduit par sa valeur plus tard seulement ce qui fait qu'elle vaut toujours la dernière valeur de la boucle lors des appels).

    Donc comment faire dans ce cas? Je pensais à quelque chose comme eval(y) pour dire d'écrire tout de suite la valeur mais eval(y) fait la même chose.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    Citation Envoyé par jgrmstr Voir le message
    Bonjour, voilà ma question va peut-être paraître bête, bref le plus simple est de vous montrer mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	var bbb = new Array();
    	bbb = $$('select.super-attribute-select');
    	for(var y=0; y<bbb.length; y++){
    		bbb[y].onchange = function(){maj_options_conf(y);}
    	}
    En clair j'assigne un évènement sur chaque élément de bbb.
    Par contre, qu'importe l'élément qui est déclenché, la variable y passée en paramètre sera toujours la dernière valeur de la boucle (j'imagine que comme l'appel de fonction est éxécuté après les boucles et donc y est traduit par sa valeur plus tard seulement ce qui fait qu'elle vaut toujours la dernière valeur de la boucle lors des appels).

    Donc comment faire dans ce cas? Je pensais à quelque chose comme eval(y) pour dire d'écrire tout de suite la valeur mais eval(y) fait la même chose.
    Pour expliquer le problème il faut savoir que dans un bloc (for, while..) il n'y a pas de scope, donc c'est la derniere valeur des variables qui est utilisée.

    La méthode serait de passer par une fonction anonyme qui te retourne une fonction ,cette fonction te récréera ce scope.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var bbb = new Array();
    	bbb = $$('select.super-attribute-select');
    	for(var y=0; y<bbb.length; y++){
    		bbb[y].onchange = (function(myY) { 
                          return function(){maj_options_conf(myY);}
    	          })(y);
         }

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Merci à tous les deux! En effet très simple la méthode de l'indice...
    Mais je ne savais pas trop comment exprimer mon problème et donc quoi chercher exactement!

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    Je ne sais pas pour toi Bovino, mais la solution fournie dans la FAQ est TRES mauvaise, car on modifie un élément du dom, et si on cherche à rester neutre, il vaut mieux passer par une fonction anonyme qui nous retourne une fonction.

    C'est ou le lien pour modifier la faq ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Ah, en quoi est-ce mauvais?

    Sinon j'ai une autre question.
    Est-ce possible qu'une instruction soit sautée, à cause du temps?
    Je m'explique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	function maj_options_conf(num_mod){
    		alert(num_mod); // <======= PB
    		if(bbb[num_mod+1]!="undefined"){
    			if(bbb[num_mod+1].options.length==2){
    				bbb[num_mod+1].options[1].selected=true;
    				fireEvent(bbb[num_mod+1], 'change');
    			}
    		}
    	} // fin fonction
    Sur mon formulaire, j'ai donc réussi à assigner grâce à vous mes évènements.
    Ceci est la fonction déclenchée à chaque onchange de chaque élément.
    Elle vérifie si il y a un prochain élément, et si oui et qu'il remplit les conditions, modifie le prochain et simule un change.
    Or, en laissant l'alerte du débogage, le script a exactement le comportement voulu.
    Mais en enlevant, ça modifie le fonctionnement du script, qui visiblement saute au moins une instruction.... Alors que pourtant c'est qu'une alerte qui ne change rien, hormi le déroulement dans le temps.
    Je me demande donc...

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par dukej
    Je ne sais pas pour toi Bovino, mais la solution fournie dans la FAQ est TRES mauvaise, car on modifie un élément du dom
    Je ne vois pas trop à quoi tu fais allusion

    Si c'est le fait d'affecter une propriété indice, cela n'a aucun impact sur le DOM puisque l'on travaille sur un objet JavaScript. Et ajouter une propriété à un objet est malgré tout assez classique...
    Bien entendu, si quelqu'un est assez gland (pardon, étourdi ) pour remplacer par exemple "indice" par "id" et qu'il s'étonne que l'id ai changé, ben... disons qu'il viendra sur le forum demander pourquoi et on lui expliquera qu'il est... étourdi !

    C'est ou le lien pour modifier la faq ?
    Dans le forum Contribuez
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Aucune idée pour cette bizarrerie problématique?

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fireEvent(bbb[num_mod+1], 'change')
    qu'y a t-il dans fireEvent, si c'est le fireEvent de MS tu n'en fait pas le bon appel.

    Citation Envoyé par Bovino
    Si c'est le fait d'affecter une propriété indice, cela n'a aucun impact sur le DOM puisque l'on travaille sur un objet JavaScript. Et ajouter une propriété à un objet est malgré tout assez classique...
    tout à fait d'accord, il n'y a qu'a regarder ce qu'ajoutent les différents browsers.

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

Discussions similaires

  1. afficher une variable
    Par Darkyl dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 10/05/2006, 15h32
  2. Afficher une variable en temps réel
    Par AraBorLeg dans le forum DirectX
    Réponses: 1
    Dernier message: 09/03/2006, 19h12
  3. Afficher une variable en temps réel
    Par AraBorLeg dans le forum Langage
    Réponses: 2
    Dernier message: 09/03/2006, 17h40
  4. afficher une variable (montant) en dollar
    Par camirefr dans le forum ASP
    Réponses: 1
    Dernier message: 19/01/2006, 22h45
  5. changer et afficher une variable en fonction d'un select
    Par psychoBob dans le forum Général JavaScript
    Réponses: 30
    Dernier message: 22/11/2005, 08h15

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