IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

specifier un parametre pour une fonction stockée dans une variable


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de kohsaka
    Homme Profil pro
    Intégrateur HTML / Developpeur .NET
    Inscrit en
    Janvier 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 383
    Points : 469
    Points
    469
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Essaie ceci :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var test = function (param){
       //code
    }
    var p = "super parametre qui va bien";
    setTimeout("test(" + p + ");", 1000);

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout("test", 1000, p);
    Il faut passer par une fonction anonyme (closure) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(function(){test(p);}, 1000);

  4. #4
    Membre confirmé Avatar de kohsaka
    Homme Profil pro
    Intégrateur HTML / Developpeur .NET
    Inscrit en
    Janvier 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 383
    Points : 469
    Points
    469
    Par défaut
    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 !

  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    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

  6. #6
    Membre confirmé Avatar de kohsaka
    Homme Profil pro
    Intégrateur HTML / Developpeur .NET
    Inscrit en
    Janvier 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 383
    Points : 469
    Points
    469
    Par défaut
    Je ne voulais pas surcharger mon post de code.
    Effectivement c'est surement un problème de portée de variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    @Romain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout("test(p);", 1000);

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    Beef tu es sur que le parmètre passe ?????

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Bah... oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function alerte(txt){
    alert(txt);
    }
    var toto = "Texte à afficher";
    setTimeout("alerte(toto)",500);

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    ceci étant la methode RV
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout("alerte('"+toto+"')",500);
    fonctionne

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par RomainVALERI
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout("test(" + p + ");", 1000);
    Citation Envoyé par SpaceFrog
    ceci étant la methode RV
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    oui si la variable change entre deux ... ^^

    d'ou la simplicité d'utilisation de la closure qui en plus évite l'évaluation

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    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

  14. #14
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appeler une fonction scalaire dans une procédure stockée
    Par Chacha35 dans le forum Développement
    Réponses: 0
    Dernier message: 10/11/2009, 11h18
  2. Réponses: 1
    Dernier message: 16/10/2008, 11h40
  3. Appel d'une procédure stockée dans une procédure stockée
    Par MrEddy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/09/2006, 16h17
  4. [VBA-E] Une fonction Excel dans une fonction VBA
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/07/2006, 10h21
  5. Réponses: 3
    Dernier message: 17/01/2006, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo