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 :

Modifier onclick dynamiquement pour passer une fonction avec paramètres


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Modifier onclick dynamiquement pour passer une fonction avec paramètres
    Bonjour à tous,

    J'essaye d'attribuer un onclick dynamiquement à des objet HTML
    ma syntaxe actuelle est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myHtmlElement.onclick=function(){myFunction();};
    Je n'ai pas d'erreur dans la console firebug mais le click ne genère pas l'appel voulu à la fonction.
    Une seconde étape lorsque la première sera fonctionnelle sera de passer des arguments à la fonction comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $var aParam = 0;
    myHtmlElement.onclick=function(){myFunction(aParam);};
    Je pense qu'il doit manquer des quotes ou doubles quotes quelque part ?

  2. #2
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Je n'ai pas d'erreur dans la console firebug mais le click ne genère pas l'appel voulu à la fonction.
    Pourtant il n'y a pas de problème, c'est ainsi que tu peux exécuter myFunction au clic sur myHtmlElement.
    Ou plus simplement :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    myHtmlElement.onclick = myFunction;

    $var aParam = 0; => Que fait le $ ici ? C'est un problème de copié/collé ?

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var aParam = 0;
    myHtmlElement.onclick = function(){
      myFunction(aParam);
    };

  3. #3
    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
    Reste à savoir d'où sort myHtmlElement.
    Une erreur typique est de vouloir appliquer une méthode (ou définir une propriété) d'un élément HTML à une collection.
    Donc si la variable myHtmlElement correspond à une collection (utilisation de getElementsByTagName, getElementsByName, getElementsByClassName, querySelectorAll), ça ne peut pas marcher.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    L'élément est de type td :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (var i=0; i < 4; i++) {
      cellule = ligne.insertCell();
      cellule.innerHTML = elements[2];  
      cellule.onclick=function(){test(i);};
    }
     
    function test(val) {
      alert("cellule " + val);
    }
    C'est presque bon mais il manque une étape. Toutes les cellules renvoient la même valeur puisque bien sure i n'est pas remplacé par sa valeur quand on assigne la fonction à onclick. Quelle est la bonne syntaxe pour obtenir une substitution de i par sa valeur lors de l'assignation de la fonction ?

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 667
    Points
    44 667
    Par défaut
    Bonjour,
    il existe la solution proposée par la
    Comment attribuer à des objets un onclick faisant appel à une variable de boucle ? entre autres.

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci, oui j'ai utilisé le même type de contournement en créant un id pour mes éléments qui me permet de récupérer la valeur cherchée en utilisant this.id

    On va dire que c'est résolu comme ça

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 667
    Points
    44 667
    Par défaut
    Le fait d'utiliser this.id n'est pas forcément une bonne idée (mouarf!!!), l'ID pouvant avoir était déjà attribuée.
    Il est plus sûr d'utiliser une propriété personnelle, ex: myId, pour ne pas risquer les conflits.

    D'un autre coté si ton besoin est de récupérer la position de la cellule sur la ligne un simple this.cellIndex devrait être suffisant.

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 02/08/2007, 11h17
  2. [DOM] Onmouseover pour lancer une fonction avec arguments
    Par Trock dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/06/2007, 13h31
  3. Gtk: problème pour passer une structure en paramètres
    Par C_Chaou dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 19/04/2007, 19h29
  4. Passer une fonction en paramètre ...
    Par Freeze dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/10/2005, 16h51
  5. [Conception] Passer une fonction en paramètre
    Par pejay dans le forum Langage
    Réponses: 9
    Dernier message: 09/12/2004, 13h58

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