Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2011, 10h29   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 1
Points : 1
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 :
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.
jgrmstr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 10h34   #2
Membre expérimenté
 
Duke Jikel
Inscription : mai 2010
Messages : 340
Détails du profil
Informations personnelles :
Nom : Duke Jikel

Informations forums :
Inscription : mai 2010
Messages : 340
Points : 548
Points : 548
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 :
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 :
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);
     }
dukej est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 10h50   #3
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 807
Points : 35 807
Comment attribuer à des objets un onclick faisant appel à une variable de boucle ?
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/02/2011, 11h02   #4
Invité de passage
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 1
Points : 1
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!
jgrmstr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h14   #5
Membre expérimenté
 
Duke Jikel
Inscription : mai 2010
Messages : 340
Détails du profil
Informations personnelles :
Nom : Duke Jikel

Informations forums :
Inscription : mai 2010
Messages : 340
Points : 548
Points : 548
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 ?
dukej est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h59   #6
Invité de passage
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 1
Points : 1
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 :
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...
jgrmstr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 13h32   #7
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 807
Points : 35 807
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 !

Citation:
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 13h59   #8
Invité de passage
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 1
Points : 1
Aucune idée pour cette bizarrerie problématique?
jgrmstr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 19h48   #9
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 930
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 930
Points : 4 744
Points : 4 744
Code :
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.
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h45.


 
 
 
 
Partenaires

Hébergement Web