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 :

Passer un nom de fonction en dynamique


Sujet :

JavaScript

  1. #1
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut Passer un nom de fonction en dynamique
    1/ Ce qui fonctionne :
    j'ai créé des éléments "div" qui, au click, lancent une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     monDiv.onclick = function() {click_lecon(bloc, index)};
    Le nom de la fonction est : click_leçon et les paramètres sont bloc et index.
    Cela fonctionne très bien.

    Ce qui pose problème :
    j'ai créé une table qui stocke mes objets MenuNav, chacun ayant trois valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    export let MenuNav = class MenuNav {
             constructor (msg, img, action) {
                this.msg = msg;
                this.img = img;
                this.action = action; 
             }
          }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    export let table_Nav = [];
          table_Nav[0] = new MenuNav ("Fermer la fiche", "images/img30/croixRouge.png", "init()");
          table_Nav[1] = new MenuNav ("voir la leçon suivante", "images/img30/croixRouge.png", "next()");
          table_Nav[2] = new MenuNav ("voir la leçon précédente", "images/img30/croixRouge.png", "back()");
    Je construis ensuite, grâce à la boucle foreach, mes trois div, en leur affectant les valeurs de chaque objets de la table.
    La problématique est la suivante :
    comment faire pour que le onclick, comprenne que l'élément el.action est une fonction dont le nom est :
    init() à la construction du premier div.
    next() à construction du deuxième.
    back() à la construction du troisième.

    Mon code actuel n'est pas reconnu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      navigation1.onclick = function() {(el.action)};
    si je mets en clair le nom de chaque fonction sur le onclick, cela fonctionne, mais l'intérêt, c'est l'affectation automatique par programmation.

    Merci à ceux qui sont affutés dans la syntaxe et qui pourront me donner des idées!....

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 648
    Par défaut
    essayez le passage de la fonction comme cela dans le constructeur :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    new MenuNav("Fermer la fiche", "images/img30/croixRouge.png", init)
    et ensuite pour l'utiliser :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
      navigation1.onclick = el.action;

  3. #3
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut bonjour mathieu
    Bonjour Mathieu,

    merci de chercher une piste mais cela ne fonctionne pas. En effet, à la construction de la page, le fait de mettre init et non "init", avec des guillemets, avec ou sans les parenthèses : init ou init(), entraine une erreur :
    Uncaught ReferenceError: init is not defined
    <anonymous> http://127.0.0.1:5500/scripts/ressource.js:63
    Merci quand même, je vais continuer à chercher car je pense que cela est possible....

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 648
    Par défaut
    cela veut juste dire que la fonction n'est pas définie au moment de la création de l'objet MenuNav.

  5. #5
    Membre confirmé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 178
    Par défaut merci Mathieu
    Je m'étais focalisé sur l'appel de la fonction qui ne se faisait pas, sans interpréter correctement le message d'erreur.

    En effet, en déclarant la fonction en amont, cette dernière est bien reconnue et l'appel fonctionne très bien.

    encore merci!!

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

Discussions similaires

  1. passer un nom de formulaire à une fonction
    Par Alexdezark dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/07/2008, 11h57
  2. nom de fonction dynamique
    Par zakuza dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 07/02/2008, 08h56
  3. Réponses: 6
    Dernier message: 06/04/2007, 21h20
  4. Noms de fonctions dynamiques
    Par pierrelm dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2006, 10h23
  5. Nom de fonction dynamique
    Par gege2061 dans le forum C
    Réponses: 2
    Dernier message: 21/06/2005, 14h44

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