Envoyé par : Utilisateur anonyme
Date : 20/04/2006 11:25
J'ai bcp de difficulté avec addEventListener . Dans le code ci-dessous, j'ajoute un addEventListener sur un bouton qui appelle la méthode fncButtonCommand. Jusqu'ici ca fonctionne. Mais ensuite je souhaite appeller la méthode fncBonjour() depuis fncButtonCommand () et j'ai alors dans la console javascript "fncBonjour() n'est pas une fonction". Or je passe sans probleme dans fncBonjour() si je passe par init().
Je chercher un peu partout une solution mais la encore je cale. Merci de votre aide.
Alban
<window id="main" onload=" var x=new classX(); x.init(); // x.fncHello(); " xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" > <script> function classX() { this.init = function() { this.main = document.getElementById("main"); this.message = "Hello World"; this.button = document.createElement("button"); this.button.setAttribute("label","Hello Button"); this.main.appendChild(this.button); // un clic sur le bouton passe dans this.fncButtonCommand qui immediatement passera dans this.fncBonjour this.button.addEventListener( "command", this.fncButtonCommand, true ); // Lors de init, je passe dans la fonction fncBonjour sans probleme this.fncBonjour(); } this.fncButtonCommand = function( argEvent ) { this.fncBonjour(); // ??? comment acceder a cette méthode ? } this.fncBonjour = function() { alert( 'Bonjour' ); } } </script> </window>
Envoyé par : Utilisateur anonyme
Date : 24/04/2006 09:49
Personne pour m'aider ? Je trouve de réponse à ce problème. Alban
Envoyé par : laurentj
Date : 24/04/2006 11:18
ta fonction fncButtonCommand etant utilisée hors de son contexte, le this ne represente plus l'objet classX mais la fonction fncButtonCommand (une fonction en JS est un objet). Voir les specs de javascript...
Envoyé par : Utilisateur anonyme
Date : 24/04/2006 11:45
Tu as un problème de "scope", i.e. de portée de this. Quand tu cliques sur le bouton, this dans fncButtonCommand ne correspond plus à ta classe, mais à l'élément button.
Quelque chose comme :
function classX() { this.init = function() { this.main = document.getElementById("main"); this.message = "Hello World"; this.button = document.createElement("button"); this.button.setAttribute("label","Hello Button"); this.main.appendChild(this.button); // un clic sur le bouton passe dans this.fncButtonCommand qui immediatement passera dans this.fncBonjour this.button.addEventListener( "command", this.fncButtonCommand, true ); // Lors de init, je passe dans la fonction fncBonjour sans probleme this.fncBonjour(); } var This = this; this.fncButtonCommand = function( argEvent ) { This.fncBonjour(); } this.fncBonjour = function() { alert( 'Bonjour' ); } }
devrais marcher (mais il y a peut être plus propre...)
Envoyé par : Utilisateur anonyme
Date : 24/04/2006 11:45
Et alors, je dois ecrire comment cette ligne de code pour atteindre l'autre fonction ?
Alban
Envoyé par : Utilisateur anonyme
Date : 24/04/2006 11:50
Merci Martin. Je vais essayer. ALban
Envoyé par : Utilisateur anonyme
Date : 24/04/2006 11:58
A nouveau MERCI Martin. Alban
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.