Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Js et addEventListener

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>

# Re: Js et addEventListener

Envoyé par : Utilisateur anonyme

Date : 24/04/2006 09:49

Personne pour m'aider ? Je trouve de réponse à ce problème. Alban

# Re: Js et addEventListener

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...

# Re: Js et addEventListener

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...)

# Re: Js et addEventListener

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

# Re: Js et addEventListener

Envoyé par : Utilisateur anonyme

Date : 24/04/2006 11:50

Merci Martin. Je vais essayer. ALban

# Re: Js et addEventListener

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.