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 avec une fonction à paramètre


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Modifier onclick avec une fonction à paramètre
    Bonjour,

    Je cherche à modifier le comportement onclick d'une liste de boutons HTML, boutons que j'ai créés et enregistrés dans une liste "liste_boutons"
    J'aimerais que le fait de cliquer sur un bouton appelle une certaine fonction (la même pour tous les boutons) avec un paramètre indiquant le numéro du bouton utilisé.
    J'ai écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (i=0;i<liste_boutons.length;i++) { 
           liste_boutons[i].onclick=function() {mafonction(i); }; 
    }
    Mon problème : à priori i est passé en "référence" et non en valeur (je ne sais pas si le terme est correct)
    Bref, tous les boutons appellent "mafonction" avec le même argument : la dernière valeur de i

    Y a-t-il un moyen de dire que, dans la boucle, je veux utiliser la valeur précise de i au moment de la boucle et non la variable i elle-même, et donc sa valeur au moment de l'appel (si j'ai bien compris ce qui se passe)

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    bonjour,

    effectivement, "i" renverra toujours la dernière valeur de la boucle puisque tes clicks ont lieu après chargement du script...
    Utilise "this" à la place, il fera référence à l'élément appelant.

    Ou sinon, simplifie ton système, sans passer par un tableau (qui fait double emploi avec ta liste d'éléments html);

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="liste">Liste de boutons: </div>

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(let i=0;i<5;i++){
    	let b=document.createElement("button");
    	b.num=i;
    	b.textContent="bouton " + i;
    	document.getElementById("liste").append(b);
    }
    document.querySelectorAll("#liste button").forEach(v => 
    	v.addEventListener("click",()=> alert(v.num)
    ))

  3. #3
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour la réponse.

    Je vais regarder comment gérer avec self c'est sans doute ce que je voulais.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 954
    Points : 44 092
    Points
    44 092
    Par défaut
    Bonjour,
    tu peux également forEach pour conserver la valeur de ton indice, pas de surcharge dans ce cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lstBtns.forEach((el, ind) => {
      el.addEventListener("click", () => alert(ind));
    });

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

Discussions similaires

  1. Onclick avec une fonction utilisant $(this)
    Par Calvein dans le forum jQuery
    Réponses: 5
    Dernier message: 20/01/2009, 16h04
  2. [AJAX] Modifier deux balises <div> avec une fonction innerhtml
    Par johnson95 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/08/2008, 18h55
  3. Modifier deux balises div avec une fonction innerhtml
    Par johnson95 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/08/2008, 17h03
  4. Réponses: 1
    Dernier message: 16/03/2007, 17h30
  5. Modifier un champs texte avec une fonction PHP (calcul TVA)
    Par Stella2809 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 00h55

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