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 25/02/2011, 09h24   #1
Membre éclairé
 
Avatar de kohsaka
 
Homme
Intégrateur HTML / Developpeur .NET
Inscription : janvier 2007
Messages : 369
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25

Informations professionnelles :
Activité : Intégrateur HTML / Developpeur .NET

Informations forums :
Inscription : janvier 2007
Messages : 369
Points : 381
Points : 381
Par défaut specifier un parametre pour une fonction stockée dans une variable

Bonjour,

Je me sens un peu bête de poser cette question car elle se trouve surement quelque part sur internet mais impossible de formuler ma requête correctement pour la trouver.

Je stock une fonction dans une variable de cette manière :

Code :
1
2
3
4
5
6
 
var test = function (param){
   //code
}
 
setTimeout(test, 1000);
Le problème c'est que je ne connais pas la syntaxe pour passer mon paramètre lors de l'appel.

merci de votre aide.
kohsaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 09h28   #2
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Essaie ceci :
Code javascript :
1
2
3
4
5
var test = function (param){
   //code
}
var p = "super parametre qui va bien";
setTimeout("test(" + p + ");", 1000);
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 09h32   #3
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
le souci ne provient pas du fait que la focntion soit ou non stockée dans une variable. C'est un souci propre à setTimeout ou setInterval.

En principe ces deux methodes acceptent un troisème argument : les paramètres. Mais ce troisième argument n'est pas reconnu par tous les navigateurs.
Code :
setTimeout("test", 1000, p);
Il faut passer par une fonction anonyme (closure) :

Code :
setTimeout(function(){test(p);}, 1000);
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h01   #4
Membre éclairé
 
Avatar de kohsaka
 
Homme
Intégrateur HTML / Developpeur .NET
Inscription : janvier 2007
Messages : 369
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25

Informations professionnelles :
Activité : Intégrateur HTML / Developpeur .NET

Informations forums :
Inscription : janvier 2007
Messages : 369
Points : 381
Points : 381
Ta solution ne marche pas RomainVALERI dans mon cas, il me dit que la fonction n'existe pas.

En revanche celle de SpaceFrog marche très bien, merci encore !
kohsaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h37   #5
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Citation:
Envoyé par kohsaka Voir le message
Ta solution ne marche pas RomainVALERI dans mon cas, il me dit que la fonction n'existe pas.
D'où l'importance de décrire son problème avec précision si possible Sans connaitre le contexte d'exécution, ca ne facilite pas les choses... c'est une histoire de portée de variables... j'imagine que l'extrait posté était en réalité à l'intérieur d'une fonction... ?

mais bref c'est en effet plus efficace de passer par une closure de toutes façons, ça permet d'éviter de passer par l'eval qui se cache dans l'utilisation de setTimeout/setInterval quand on leur passe une chaine en premier param...

donc +1 SF
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h07   #6
Membre éclairé
 
Avatar de kohsaka
 
Homme
Intégrateur HTML / Developpeur .NET
Inscription : janvier 2007
Messages : 369
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25

Informations professionnelles :
Activité : Intégrateur HTML / Developpeur .NET

Informations forums :
Inscription : janvier 2007
Messages : 369
Points : 381
Points : 381
Je ne voulais pas surcharger mon post de code.
Effectivement c'est surement un problème de portée de variables

Code :
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
26
27
28
29
30
31
32
33
34
35
36
37
38
 
; (function($) {
    $.fn.extend({
        miniPopup: function(options) {
            options = $.extend({}, $.newMiniPopup.defaults, {}, options);
 
            return this.each(function() {
                new $.newMiniPopup($(this), options);
            });
        }
    });
 
    $.newMiniPopup = function(mainElt, options) {
		var hidePopup = function (popupElt){
			popupElt.fadeOut(options.fxTime);
		}
 
		var popup = $(".aToolTip");
		var popupText = mainElt.parent().find(":hidden").val();
                var newPopup = jQuery('<div class="aToolTip"><a href="#" class="aToolTipCloseBtn"></a><p>' + popupText + '</p></div>').css({display: "none"});
 
		$(popup).remove();
 
		mainElt.parents(".question").append(newPopup.fadeIn(options.fxTime));
		setTimeout(function(){hidePopup(newPopup);}, options.displayTime);
 
		$(".aToolTipCloseBtn").live("click", function(){
			$(this).parent().fadeOut(options.fxTime);
 
			return false;
		});
    };
 
    $.newMiniPopup.defaults = {
        displayTime: 5000,
	fxTime: 500
    };
})(jQuery);
kohsaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h22   #7
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 807
Points : 35 807
@Romain :
Code :
setTimeout("test(" + p + ");", 1000);
n'est pas recommandé, cette notation faisant appel à eval(). D'où d'ailleurs ton erreur, il faut passer p dans la chaine et non sa valeur
Code :
setTimeout("test(p);", 1000);
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h25   #8
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
Beef tu es sur que le parmètre passe ?????
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h48   #9
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 807
Points : 35 807
Bah... oui
Code :
1
2
3
4
5
function alerte(txt){
alert(txt);
}
var toto = "Texte à afficher";
setTimeout("alerte(toto)",500);
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h52   #10
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
ceci étant la methode RV
Code :
setTimeout("alerte('"+toto+"')",500);
fonctionne
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h57   #11
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 807
Points : 35 807
Citation:
Envoyé par RomainVALERI
Code javascript :
setTimeout("test(" + p + ");", 1000);
Citation:
Envoyé par SpaceFrog
ceci étant la methode RV
Code :
setTimeout("alerte('"+toto+"')",500);
fonctionne
Ouais, en la corrigeant
Mais dans ce cas, tu ne passe pas une variable à la fonction, mais sa valeur (donc la valeur, au moment de l'appel, pas au moment où le code est exécuté
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h59   #12
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
oui si la variable change entre deux ... ^^

d'ou la simplicité d'utilisation de la closure qui en plus évite l'évaluation
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 12h10   #13
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 807
Points : 35 807
Citation:
Envoyé par SpaceFrog
d'ou la simplicité d'utilisation de la closure qui en plus évite l'évaluation
Oui, là-dessus, on est bien d'accords
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 12h49   #14
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Il me manquait les quotes en effet ^^

au final : closure pour tout le monde

Citation:
Envoyé par Spaffy
la méthode RV
oh my god.... une méthode faisant appel à "eval" qui porte mon nom.... c'est un cauchemar réveillez-moi
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI 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 +2. Il est actuellement 16h51.


 
 
 
 
Partenaires

Hébergement Web