Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les 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
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 39
Points : 26
Points : 26
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<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 00
Vieux 30/06/2009, 22h14   #2
Membre confirmé
 
Avatar de nod__
 
Étudiant
Inscription : avril 2009
Messages : 176
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 176
Points : 208
Points : 208
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 00
Vieux 30/06/2009, 22h19   #3
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 39
Points : 26
Points : 26
Envoyer un message via MSN à Shinjuku
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 00
Vieux 30/06/2009, 22h40   #4
Membre confirmé
 
Avatar de nod__
 
Étudiant
Inscription : avril 2009
Messages : 176
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 176
Points : 208
Points : 208
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<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 00
Vieux 01/07/2009, 08h49   #5
Modérateur
 
Avatar de gwyohm
 
Inscription : octobre 2007
Messages : 779
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2007
Messages : 779
Points : 937
Points : 937
Envoyer un message via Yahoo à gwyohm
Tu peux peut être changer ton code pour ca (en rouge, le code ajouté):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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"
Pas de question technique par MP
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 09h03   #6
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 39
Points : 26
Points : 26
Envoyer un message via MSN à Shinjuku
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 00
Vieux 01/07/2009, 09h11   #7
Expert Confirmé
 
Avatar de le_chomeur
 
Développeur informatique
Inscription : février 2006
Messages : 3 524
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 3 524
Points : 3 965
Points : 3 965
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 00
Vieux 01/07/2009, 11h18   #8
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 39
Points : 26
Points : 26
Envoyer un message via MSN à Shinjuku
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 :
1
2
3
4
5
6
 
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 00
Vieux 01/07/2009, 11h50   #9
Expert Confirmé
 
Avatar de le_chomeur
 
Développeur informatique
Inscription : février 2006
Messages : 3 524
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 3 524
Points : 3 965
Points : 3 965
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 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 05h46.


 
 
 
 
Partenaires

Hébergement Web