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 :

[addEventListener]Passer des paramètres a la fonction a éxécuter


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 109
    Par défaut [addEventListener]Passer des paramètres a la fonction a éxécuter
    Salut !

    Un petit soucis pour passer un paramètre.

    En gros, j'ai une boucle for qui fait défiler un certain nombre d'éléments auquel je souhaite attacher un évènement. Seulement, j'ai besoin de passer la valeur de l'index courant à la fonction à attacher.

    Le code source donne ceci pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(var index=0;index<6;index++){
    	tabs.add(document.getElementById('tab'+index)).addEventListener('click', evtFct=function(){tabs.select(index).bind(tabs)}, false);
    }
    Avec cette technique, tabs.select reçoit bien l'index. Le soucis, c'est qu'au moment de déclenché l'évènement, index a la dernière valeur qui lui a été attribué (donc 6, ce qui est parfaitement logique et normal).

    Sachant que je peux pas passer directement de paramètre a la fonction que j'attache a l'évènement, comment passer indirectement la valeur de l'index a select() au moment où ce dernier est attaché ?

    Je préfèrerais éviter de créer spécialement un membre selectindex a mon objet tabs.

    Je sais pas si je suis très clair

  2. #2
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    En fait j ai pas bien compris ce que tu veux ,

    mais j avais ete confronte a des problemes d evenements il y a quelques temps et je m etais depatouille avec ce lien :

    http://www.quirksmode.org/js/events_order.html

    Si tu peux expliquer un peu mieux stp

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 109
    Par défaut
    Pour simplifier l'écriture a l'extrême, je voudrais faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(var index=0;index<6;index++){
    	tabs.item[index].addEventListener('click', tabs.select(index), false);
    }
    Sauf que ce cas là renvoi une erreur vu qu'on peut pas directement passer d'argument a une fonction qu'on attache a un évènement.

    Pour contrer cette limitation, j'utilise habituellement cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .addEventListener('click', evtFct=function(){tabs.select(index)}, false);
    Cette méthode fonctionne, tabs.select reçoit bien index.

    Sauf que dans mon cas, la valeur de index change a chaque itération de la boucle. Donc quand evtFct est exécuté, index a la dernière valeur qui lui a été attribué par la boucle, soit 6, et non la valeur qu'il avait au moment où j'ai attaché la fonction à l'évènement (respectivement 0, 1, 2, 3, 4, 5).
    Hors ce qui m'intéresse, c'est ce deuxième cas.

    C'est moins obscure ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 109
    Par défaut
    A priori, mon explication est toujours aussi obscure. Mais je sais pas vraiment comment être plus clair

  5. #5
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    apparament c est resolu avec cet instructiion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objet.setAttribute('OnClick', 'mafonction('+variable+')');

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 109
    Par défaut
    C'est un piège. Cette solution a un gros défaut, elle écrase les autres évènements posé sur la balise

    (question bonus, y a pas d'accès au prototype sur les objets DOM ?)

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

Discussions similaires

  1. Passer des paramètres dans la fonction Fancybox
    Par nicolas2603 dans le forum jQuery
    Réponses: 0
    Dernier message: 09/10/2011, 16h00
  2. Réponses: 2
    Dernier message: 28/04/2008, 20h04
  3. Réponses: 2
    Dernier message: 21/07/2007, 01h12
  4. Réponses: 3
    Dernier message: 16/05/2007, 10h03
  5. Réponses: 5
    Dernier message: 16/11/2006, 07h09

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