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 :

Appeler une fonction avec un string


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Appeler une fonction avec un string
    Bonjour,

    J'ai une fonction à appeler dont le nom change en fonction d'un lien cliqué.
    Suite à une recherche rapide, j'ai trouvé une technique simple qui a l'air de pas trop mal marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window[functionName_string]();
    La fonction est bien retrouvée mais mon soucis c'est qu'elle ne se lance pas...
    Voici le bout de code incriminé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function test(message,callBack_function)
    {
    alert(message+" "+callBack_function);
    window[callBack_function]();
    return;
    }
     
    function recap()
    {
    alert("fonction recap appelée");
    }
     
    test("toto","recap");
    J'obtiens bien l'alerte correspondante de ce type :
    toto function recap() {
    alert("recap");
    }
    mais je n'obtiens pas l'alerte
    fonction recap appelée
    Quelqu'un aurait une idée de comment remédier à ce problème?

    Merci beaucoup,
    Cyril

  2. #2
    Membre actif
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 121
    Points : 217
    Points
    217
    Par défaut
    Bonjour,

    J'ai testé ton code avec Firefox 3.6.13 , IE 8.0.7600.16385 et Chrome 8.0.552.237

    Le résultat fonctionne avec les trois navigateur.

    Quel navigateur utilises tu et quelle est sa version ?

    cordialement
    Je connais des gens qui ne sont pas aware, il ne sont pas qu courant. il ne sont pas a l'attention de savoir qu'ils existent.
    "J-C Van dam"

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    FF 3.6.13
    IE 6

  4. #4
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Si tu mets bien les guillemets dans ton 2ème arguments, ( donc un string) le résultat que tu nous montres devrait être "toto recap" et non "toto fonction recap (){... }"


    Si tu passes la fonction et non son nom en string alors tu peux l appeler normalement :
    CallBack _fonction();
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    ça marche (c'était bien un problème de guillemets)!
    la résolution d'un problème la plus rapide du monde, waow!!
    bravo et merci beaucoup Willpower pour ton efficacité et ta rapidité!!
    Cyril

  6. #6
    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
    Un détail à noter cependant :
    En JS, le style visuel (je veux dire : l'indentation et le formatage de blocs) que tu utilises est à déconseiller très fortement. Je veux parler du saut de ligne entre la signature de tes fonctions et l'accolade ouvrante de leur bloc de code.

    Le moteur JS, oui je sais c'est affreux , possède une fonctionnalité d'insertion automatique de ";" en fin de ligne et ça peut mener à des erreurs très difficiles à repérer (voir cet article (en anglais, désolé ) pour un exemple détaillé)

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

    __________________

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    merci pour tes conseils Romain, j'en prends note!

    au fait, pour ceux pour qui la résolution du problème n'est pas très clair, l'erreur était en fait dans mes fichiers et non dans le code que j'ai posté sur ce forum, j'avais en fait oublié les guillemets lors de l'appel de la fonction test() :
    il faut bien écrire :
    et non
    merci encore et désolé pour le dérangement!

  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 637
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    et non
    Code :

    test("toto",recap);
    sauf si tu as avant:
    Ma page Developpez - Mon Blog 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

    Venez sur le Chat de Développez !

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    sauf si tu as avant:
    attention recap dans ce cas est redéfini en variable et ne supporte plus les () dans l'appel window[callBack_function]();

  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 637
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Je n'ai pas du comprendre ta remarque NoSmo ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function bar(){
    alert('coucou')}
    var recap="bar"
    window[recap]()
    Ma page Developpez - Mon Blog 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

    Venez sur le Chat de Développez !

  11. #11
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Je n'ai pas du comprendre ta remarque NoSmo ...
    Ce qu'il voulait dire c'est que ceci n'ira pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function recap(){
    alert('coucou')}
    var recap="recap"
    window[recap]()
    ;-)
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  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 637
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Ha oui !!!!!!!
    Vu comme ça
    Ma page Developpez - Mon Blog 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

    Venez sur le Chat de Développez !

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    exact,
    je parlais bien dans le contexte écrit par wazzzzza, sinon pas de problème pour l'affectation à une variable du nom d'une fonction.

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

Discussions similaires

  1. Appeller une fonction avec un string
    Par Thibqult dans le forum Général Python
    Réponses: 26
    Dernier message: 18/12/2011, 20h46
  2. Appel de fonction avec un string
    Par james_kirk dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/04/2008, 04h39
  3. Appeler une fonction avec un tableau en parametre ?
    Par devoluti0n dans le forum C++
    Réponses: 9
    Dernier message: 11/04/2008, 16h21
  4. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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