Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire Cours JavaScript, 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 30/06/2009, 22h06   #1 (permalink)
Futur Membre du Club
 
Date d'inscription: mars 2003
Messages: 39
Envoyer un message via MSN à Shinjuku
Par défaut Fonction dans une fonction anonyme

J'aurais besoin d'aide pour accéder à une variable ou une fonction qui se trouve dans une fonction anonyme.

Voici le code semblable à ma page :

Code :
 
<html>
<head>
<script>
(function() {
	var t = 0;
	function Count() {
		t++;
		window.setTimeout(Count, 2000);
	}
	window.setTimeout(Count, 2000);
})();
 
</script>
</head>
<body>
<input type="button" onclick="Count();" />
</body>
</html>
 
Et donc, comme le code le montre, je voudrais pouvoir lancer la fonction Count par un bouton, mais comme la fonction Count est dans la fonction anonyme, je ne peux pas y accéder aussi facilement.

J'ai voulu parcourir l'ensemble des fonctions de la page mais impossible de trouver l'objet en question.

Je vous remercie d'avance pour votre aide.

PS : Pas besoin de me répondre qu'il suffit de sortir la fonction Count de la fonction anonyme, le code doit être implanté de cette façon là.
Shinjuku est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/06/2009, 22h14   #2 (permalink)
Membre habitué
 
Avatar de nod__
 
Date d'inscription: avril 2009
Localisation: Lille
Messages: 162
Par défaut

bah utilise javascript pour attacher ton évènement, au passage ça sera plus pertinent vu comment tu fais ça.
nod__ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/06/2009, 22h19   #3 (permalink)
Futur Membre du Club
 
Date d'inscription: mars 2003
Messages: 39
Envoyer un message via MSN à Shinjuku
Par défaut

Ben disons que moi je fais rien.

On m'a donné ce code, je ne peux pas le modifier, je dois jute ajouter un bouton pour pouvoir accéder à la fonction.

Je rappelle que j'ai volontairement simplifié la page pour montrer ce que j'ai besoin de faire, en réalité, la fonction anonyme est beaucoup plus complexe.

Il faut donc partir du principe que je ne peux rien changer, il faut juste que je lance une fonction au click sur le bouton, et dans cette fonction je dois trouver une méthode pour pouvoir accéder part un moyen ou un autre d'incrémenter la variable "t". Soit en exécutant de manière volontaire la fonction Count, ou en accédant directement à la variable "t".

Au passage, j'ai un peu de mal à te suivre quand tu parles "d'attacher mon évènement"...

Merci pour ton aide en tout cas
Shinjuku est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/06/2009, 22h40   #4 (permalink)
Membre habitué
 
Avatar de nod__
 
Date d'inscription: avril 2009
Localisation: Lille
Messages: 162
Par défaut

j'ai le regret de te dire qu'avec ce code et si tu ne peux pas changer le javascript contenu dans cette fonction : tu est niqué.

C'est une construction pour éviter que des variables globales ne trainent, si c'est pas global, tu peux pas y acceder en rajoutant un paramètre dans un attribut onclick.

une solution aurait été :
Code html :
 
<html>
<head>
<script>
(function() {
	var t = 0;
	function Count() {
		t++;
		window.setTimeout(Count, 2000);
	}
	window.setTimeout(Count, 2000);
 
	var button = document.createElement("button");
	button.type="button";
	button.onclick = Count;
	button.innerHTML = "click";
	document.body.appendChild(button);
})();
 
</script>
</head>
<body>
 
</body>
</html>
 
nod__ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 08h49   #5 (permalink)
Modérateur
 
Avatar de gwyohm
 
Date d'inscription: octobre 2007
Localisation: Paris
Messages: 490
Par défaut

Tu peux peut être changer ton code pour ca (en rouge, le code ajouté):
Code :
<script>
var objet = (function() {
	var t = 0;
	function Count() {
		t++;
		window.setTimeout(Count, 2000);
	}
	window.setTimeout(Count, 2000);
        return {
           runCount : function() {
             Count();
           }
        };
})();

</script>

<input type="button" onclick="objet.runCount();" />
__________________
on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 09h03   #6 (permalink)
Futur Membre du Club
 
Date d'inscription: mars 2003
Messages: 39
Envoyer un message via MSN à Shinjuku
Par défaut

Nikel merci !

C'est juste ce que je voulais savoir, si c'était possible ou pas, j'ai tellement cherché que je me demandais si en fait c'était vraiment possible.

Mais comme en informatique tout est possible, j'ai préféré demander

Finalement tout n'est pas possible ! Bref, on va jeter la librairie qu'on a et tout recommencer, du coup je vais garder vos bouts de code, ça pourra me servir, merci beaucoup
Shinjuku est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 09h11   #7 (permalink)
Modérateur
 
Avatar de le_chomeur
 
Date d'inscription: février 2006
Localisation: Normandie
Messages: 3 346
Par défaut

Question !!!

Pourquoi vouloir impérativement passer par une fonction anonyme ??
__________________
est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )
le_chomeur est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 11h18   #8 (permalink)
Futur Membre du Club
 
Date d'inscription: mars 2003
Messages: 39
Envoyer un message via MSN à Shinjuku
Par défaut

Ben vu que ça n'a pas l'air possible de faire ce que je veux, je vais devoir refaire cette partie et donc je ne ferais pas de fonction anonyme afin de le refaire propre.

Mais vu la tête de la fonction en réalité, ça m'aurait pris beaucoup moins de temps si j'avais pu parcourir les objets de la page et retrouver d'une manière ou d'une autre la fonction Count.

J'ai fait des essais en faisant des
Code :
 
for (i in window) {
  if (typeof window[i] == 'function') {
    alert(i);
  }
}
 
mais je trouve rien correspondant à Count. Alors je me suis demandé si y'avais pas un autre moyen de le trouver ce Count en cherchant peut être plus en profondeur dans window...

Mais visiblement pas de solution... Dommage.
Shinjuku est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 11h50   #9 (permalink)
Modérateur
 
Avatar de le_chomeur
 
Date d'inscription: février 2006
Localisation: Normandie
Messages: 3 346
Par défaut

le but final ???
__________________
est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )
le_chomeur est déconnecté   Envoyer un message privé Réponse avec citation
NEWS JAVASCRIPTF.A.Q JSTUTORIELS JSSOURCES JSLIVRES JS

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 23h52.


Vos questions techniques : forum d'entraide JavaScript - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.