begin process at 2012 05 29 18:01:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

JavaScript Orienté objet (POO)

 > 

Classes

 > 

removeEventListener: 22 lignes; 22 heures de réflexions; 0 solution (ZERO)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

removeEventListener: 22 lignes; 22 heures de réflexions; 0 solution (ZERO)

mercredi 6 avril 2011 à 23:15:38 | removeEventListener: 22 lignes; 22 heures de réflexions; 0 solution (ZERO)

alexflex25

Bonjour à tous,
je reviens vers vous pour trouver une solution à un problème que j'ai simplifié au maximun...
En règle général la solution me vient rapidement quand le problème est simplifié, mais là ...
Mes compétences ne suffise plus...

Code Javascript :
var essai = Class.create();
essai.prototype = {
	initialize : function(texte){
		this.texte = texte;
		document.addEventListener("click",this.callThisMethod.bind(this),false);
		document.addEventListener("click",OtherSimpleFunction,false);
	},
	callThisMethod : function(){
		this.ThisMethod();
	},
	ThisMethod : function(){
		alert(this.texte);
                //Le problème se trouve donc ICI, juste là...
                //Pourquoi la ligne ci-dessous ne fonctionne pas
		document.removeEventListener("click",this.callThisMethod.bind(this),false);
	}
}

function OtherSimpleFunction(){
	alert('Hello, Just One Time');
	document.removeEventListener("click",OtherSimpleFunction,false);	
}

var a = new essai('Hello, Forever ... Grrrrr');


La recette est simple:
- Un page vide
- On ajoute le code Javascript
- On clique une fois dans le document
- Nous avons donc deux alert "Hello, Forever ... Grrrrr" et "Hello, Just One Time"
- (Tous va très bien jusque là...)
- On clique à nouveau (parce qu'on aime bien cliquer)
- (C'est là que tout va mal)
- Le message alert "Hello, Forever ... Grrrrr"

Je ne comprend pas pourquoi, alors que je suis supposé l'avoir enlevé comme le premier...
Avez-vous une piste?

De mon coté je penche pour "la référence incorrecte sur la fonction callThisMethod de la méthode ThisMethod utilisé dans pour faire le removeEventListener"! Mais ou est Charlie? (la bonne référence!)

Merci beaucoup d'avance pour votre aide... Aucune idée n'est stupide alors hésité pas.
jeudi 7 avril 2011 à 17:05:28 | Re : removeEventListener: 22 lignes; 22 heures de réflexions; 0 solution (ZERO)

kazma

Administrateur CodeS-SourceS
et si tu evite de passer par une fonction anonyme pour appel l'autre fonction sa donne quoi

Code Javascript :
callThisMethod : function(){
		this.ThisMethod();
	},
	ThisMethod : function(){
		alert(this.texte);
                //Le problème se trouve donc ICI, juste là...
                //Pourquoi la ligne ci-dessous ne fonctionne pas
		document.removeEventListener("click",this.callThisMethod.bind(this),false);
	}
}



il me semble que le this de la fonction anonyme n'est pas celui du prototype si c'est le cas il faudrait definir une variable qui contiendrait une reference au this

Code Javascript :
var lui=this

callThisMethod : function(){
		lui.ThisMethod();
	},




jeudi 7 avril 2011 à 18:25:11 | Re : removeEventListener: 22 lignes; 22 heures de réflexions; 0 solution (ZERO)

alexflex25

Réponse acceptée !
Bonjour,

Il n'y a aucune fonction anonyme?
Il y a 3 méthodes de l'objet "essai" dont le constructeur. Plus une fonction "OtherSimpleFunction"
Ou alors je n'ai pas compris ce que tu as dis...

(Dans le cas ou j'ai compris voici ma réponse à ton poste...)

La méthode "this.ThisMethod()" est bien appelé par la méthode "this.callThisMethod()" a cause du bind(this) de la ligne
Code Javascript :
document.addEventListener("click",this.callThisMethod.bind(this),false);

Donc ajouter un attribut référencent l'objet lui même n'y change rien...

En revanche la nuit m'a porté conseil... Voici une solution qui me convient parfaitement.
Il faut ajouter un référence sur la méthode ("binder") puisque "bind" fais une copie de la méthode donc la référence change

Au final voici le code qui fonctionne!

Code Javascript :
var essai = Class.create();
essai.prototype = {
	initialize : function(texte){
		this.texte = texte;
                //Ligne Astucieuse
		this.callThisMethodBound = this.callThisMethod.bind(this);
		document.addEventListener("click",this.callThisMethodBound,false);
		document.addEventListener("click",OtherSimpleFunction,false);
	},
	callThisMethod : function(){
		this.ThisMethod();
	},
	ThisMethod : function(){
		alert(this.texte);
		document.removeEventListener("click",this.callThisMethodBound,false);
	}
}

function OtherSimpleFunction(){
	alert('Hello, Just One Time');
	document.removeEventListener("click",OtherSimpleFunction,false);	
}

var a = new essai('Hello, Forever ... Grrrrr');


Merci kazma de la réflexion apporté sur le sujet!


Cette discussion est classée dans : solution, function, document, hello, removeeventlistener


Répondre à ce message

Sujets en rapport avec ce message

cellules d'un tableau qui changent de couleur [ par hella71 ] Merci Vous trouverez ci apres le scripttout va bien sur iexplorer mais sur netscape ca marche pas Merciiiiiiiiiii pour votre aide.function cha envoi d'un form [ par laurent98 ] comment changerla propriete "action" d'un formje fais :function accept() { document.form.action.value="./valid2.php?a=accept"; document.form.submit(); multicalque pour image [ par shrogs ] bonjour voila j ai un probleme je veux faire apparaitre et disparaitre des calque d image mais le hic c est que je ne sais pas pourquoi ca ne marche p Liens dynamique [ par AviShow ] Hello ! J'avais déjà demandé de l'aide il y a plusieurs mois, et je suis toujours dans l'impasse, snif. Je voudrais simplement, dans mes sous-menus, a appelle d'un fonction d'une iframe [ par davwart ] BOnjour à tous.. j'ai un petit probleme avec un appel de fonction,je m'explique : j'ai un document qui contient une iframe "correctionFrame" , dans la Script [ par abbaye ] Bonsoir,J'ai une question sûrement bête pour les pros mais voilà: j'aimerai inserer plusieurs scripts sur une page html de mon site mais quand je veux Tableau 2D [ par malik7934 ] Hello, En deux mots: j'ai fais ça: http://noisy.ch/smilies/smilies2.html mais je n'y connais rien à Javascript (c'est pour un chat en php). J'ai modi Problème de streaming [ par supersalley ] Bonjour à tous, j'ai trouvé un script de streaming que je n'arrive à faire marcher que partiellement. Je m'explique:J'ai mis ce code dans le head:func rendre image cliquable DHTML dans script fournit [ par bernie69 ] Bonjour à tous, Pour une de mes pages d'un site en php, j'ai intégré un script dhtml pris ici : http://www.dhteumeuleu.com/  (cliquer sur "les scripts Probleme de différence de taille entre IE et Mozilla (etc) [ par chandler_vodkamartini ] Voilou, j'explique la situation, j'ai un scroll javascript qui agit sur une suite d'image et de texte placée dans un container qui a une certaine tail


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,841 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales