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 habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    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 : 167
    Points : 162
    Points
    162
    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 éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    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 habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    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 : 167
    Points : 162
    Points
    162
    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 éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    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 habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    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 : 167
    Points : 162
    Points
    162
    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