|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Inscription : octobre 2008 Messages : 407 ![]() |
Bonjour à tous,
je souhaite attribuer un argument à une fonction ajoutée en DOM sur des boutons créer dans une boucle. Mon code : Code :
Je souhaiterai savoir comment faire pour que les arguments de chaque boutons correspondent au "i" au moment de la création de l'écouteur d'évènement "onclick" et aussi comment savoir de quel bouton provient l'évènement. Merci à tous pour vos réponses |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
Code :
__________________
Ma page 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 ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||
|
|
00
|
|
|
#3 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 847 ![]() |
Citation:
Enfin, deja ça me semble bizarre que ça ne fonctionne pas. P-e qu'en déclarant une "var value = i" dans là boucle ou dans là fonction ça corrigera le problème. Autrement, je sais que dans mon jeune temps, quand j'étais un noob en js, j'avais résolu ce problème en attachant une value (ou un objet) à mon dom objet. Du genre "bouton.myvalue = i" puis je récupérai ma value grace à event.target.myvalue. ( ou qqes chose du genre.) :-) |
|||
|
|
00
|
|
|
#4 | ||
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 802 ![]() |
Code :
bouton.onclick = function(){ objet.catchEvent(i) ; } ; Il faut attribuer une propriété à l'objet en question : Code :
__________________
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 JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
||
|
00
|
|
|
#5 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 847 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#6 | |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 847 ![]() |
Citation:
|
|
|
|
00
|
|
|
#7 | ||||||||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 419 ![]() |
Citation:
Citation:
bonsoir j'aurais mois aussi utilisé cette approche et oui quelque soit le navigateur la méthode onclick à accès à this et le this en question est une référence à l'objet sur lequel on a cliqué J'utilise beaucoup cette approche tu peux faire un view source sur http://jeanyves.terrien.free.fr/DomTabs.html la propriété currentTab sur l'objet ul fonctionne ainsi attention tout de même à ne pas utiliser comme nom de propriété une propriété ou un attribut de l'objet pour aller jusque au bout tu pouvais aussi utiliser cette méthode pour l'objet this de la méthode Code :
comme tu fais ça dans ta méthode assignEvent tu passe directement l'objet this pas besoin de créer une variable locale object l'autre approche est celle que tu avait utiliser pour object c'est a dire définir une variable dont la porté serait accessible à la méthode onclick cette approche est utilisé par certain framework elle consiste à avoir une fonction createCallBack qui construit un fonction annonyme dans une closure contenant les éléments de contexte nécessaire celle ci-si étant affecté onclick voir http://dev.sencha.com/deploy/dev/docs/?class=Function ta méthode deviendrait alors quelque chose comme Code :
|
||||||||
|
|
00
|
|
|
#8 | ||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 847 ![]() |
bon, je viens de tester sur un vrai pc :
le code que t'as filé ne ressemble à rien, il ne "compile" de nulle part, donc je ne comprend pas comment tu peux avoir des problèmes avec la valeur de i ? tu ne déclares même pas i ! (1 = 0) ^^ ensuite, la solution : Code js :
edit: ps: je ne connais pas l'étendu de ton code, mais si ton code se limite plus ou moins à ce que tu nous montres, alors tu n'as peut-être pas besoin de jouer avec les objets et leurs prototypes : (parce que là, on essaye d'adapter le code pour garder l'esprit de ton code original, çàd appeler catchEvent sur l'objet "cBtn.boutons" (ce qui à mon avis, n'est pas forcément ton idée). une autre solution (simplifiée mais p-e suffisante pour ton utilisation): Code js :
|
||||
|
|
00
|
|
|
#9 | ||
![]() ![]() Inscription : janvier 2011 Messages : 2 930 ![]() |
on peut également passer par un variable à laquelle on assigne une fonction retournant la méthode catchEvent
Code :
|
||
|
|
00
|
|
|
#10 | ||||
|
Membre actif
![]() Inscription : octobre 2008 Messages : 407 ![]() |
Bonjour à vous,
D'ors et déjà merci d'avoir participé à cette discussion... WillPower, tu as bien vu j'ai fait une erreur de rédaction à ce niveau : Citation:
j'ai fait une bêtise Citation:
De ce fait j'ai besoin d'appliquer une fonction à chaque bouton qui sera créé et d'attribuer un paramètre afin de pouvoir "slider" jusqu'à l'élément souhaité par l'internaute. Cette solution me paraît-être la plus rapide à mettre en place, parce que je la comprend : Citation:
Citation:
Encore merci pour votre participation, je viens faire un retour une fois que j'ai fait le tour de toutes vos suggestions. ![]() J'adore ce forum !!! Je fais une license concepteur/développeur et lors d'un cours un des profs à critiqué développez ké . Merci à vous.Edit: Un petit édit pour noSmoking, merci pour ta soluce je vais la prendre en considération également. |
||||
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 847 ![]() |
En fait ce qui me semblait étrange dans ta solution, c'était de faire :
unBouton.onclick = tousMesBoutons.catchEvent(); Est-ce vraiment utile d'appliquer cela sur "tousMesBoutons" ? |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 847 ![]() |
Excuse-moi de te contredire mais non, mon navigateur a crié gare qqes fois quand j'ai voulu exécuter ton code. Notamment les variables "boutons" qui devraient être des "this.boutons". :-)
|
|
|
00
|
|
|
#13 |
|
Membre actif
![]() Inscription : octobre 2008 Messages : 407 ![]() |
oui aussi tu as raison ! |
|
|
00
|
|
|
#14 | ||
|
Membre confirmé
![]() Inscription : mars 2006 Messages : 318 ![]() |
Les fonctions anonymes & fermetures (closures) à la rescousse...
Code :
C'est très similaire à ce que t'as déjà proposé NoSmoking, et dans le fond, si tu veux le nom de la technique convenant dans ton énoncé, il s'agit du currying. Cf. ce billet. |
||
|
|
00
|
|
|
#15 | |||||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 419 ![]() |
Citation:
dès lors une bonne pratique est d'éviter d'utiliser les variables du scope courant même si cela reste possible et de ne passer à la closure que celle qu'on utilise. Code :
mais en agissant ainsi de façon systématique on écrit dans le code les variable que l'on veux voir à porté de la closure cela évite la création de variable locale juste pour pour l'utiliser dans la closure ainsi la variable object n'a plus lieu d'être elle est un paramètre de la closure. dans mon code la closure comme l'a montré Oscar Hiboux peut directement utiliser la variable boutons (boutons[i]). utiliser un paramètre btn permet de voir que la closure n'utilisera que l'objet boutons[i] et non tout le tableau boutons je vous ai mis des couleurs pour montrer les correspondances le corps de la closure n'utilise que les paramètres index, objet, btn et les valeur qui lui sont passé sont i, this, boutons[i] enfin on peut noter la présence de var devant bouton qui limite la porter de cette variable à la closure. A+JYT |
|||||
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 847 ![]() |
|
|
|
00
|
|
|
#17 | ||
|
Membre actif
![]() Inscription : octobre 2008 Messages : 407 ![]() |
Bonjour à tous,
je reviens comme convenu faire un retour, ou plutôt poster ma réalisation et surprise de nouvelles réponses viennent compléter les précédentes, alors déjà MERCI. Je ne suis pas suffisamment technicien pour pouvoir déterminer parmi toutes vos propositions quelle est la meilleure. Du moins pour le moment puisque je vais étudier vos réponses .Plutôt que de faire un long discours, je vous joins ce que j'ai fait : Code :
|
||
|
|
00
|
|
|
#18 |
|
Membre actif
![]() Inscription : octobre 2008 Messages : 407 ![]() |
Qu'en pensez-vous ? Votre avis m'intéresse !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com