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 :

[POO] Comment assigner des paramètres à un évènement?


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 123
    Points : 111
    Points
    111
    Par défaut [POO] Comment assigner des paramètres à un évènement?
    Bonjour!

    J'ai une fonction javascript qui permet à l'utilisateur de changer de page lorsqu'il clique sur la rangée d'un tableau. L'URL cible est contenu dans la variable nommée « url » (de type string) et la référence vers la ligne du tableau est dans la variable nommée « tr » (de type objet).



    Voici mon code initial, fautif (afin de vous simplifier la compréhension de mon problème, j'ai remplacé une bout de script non concerné par « //... »):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function assignerURL() {
      var url;
      var tr;
     
      //...
     
      tr.onclick = function() {
        window.location.href = url;
      }
    }
    Ce code fonctionnait, toutefois la valeur de « url » était toujours la même d'un appel à l'autre de la fonction. J'ai donc remplacé le tout par ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function changerURL(url) {
      return function() {
        window.location.href = url;
      }
    }
     
    fucntion assignerURL() {
      var url;
      var tr;
     
      //...
     
     
      tr.onclick = changerURL(url);
    }
    J'exécute une fonction qui renvoie une autre fonction. Cela fonctionne très bien, autant dans IE que dans Firefox mais j'ai l'impression que cette façon de faire n'est pas très propre.

    Donc voici mes questions:
    • Y a-t-il une meilleure méthode pour obtenir le même résultat, soit de passer de paramètres à une fonction assignée à un évènement?
    • Serait-ce mieux d'utiliser « addEventListener » et si oui, comment faire pour l'utiliser avec une fonction à paramètres?


    Merci bien!

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 651
    Points : 11 145
    Points
    11 145
    Par défaut
    bonjour,

    essaye cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    tr.url = url;
    tr.onclick = function() 
    {
        window.location.href = this.url; // this designe l'objet tr
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 123
    Points : 111
    Points
    111
    Par défaut
    Ça fonctionne à merveille! Merci! C'est beaucoup plus simple que je ne l'aurais cru.

    J'ignorais qu'on pouvait directement assigner des propriétés personnalisées aux objets javascript de cette façon.

    Ça voudrait dire qu'on pourrait utiliser (pour un objet oTR déja défini), par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var sLegume = 'Patate chaude!';
    oTR.legume = sLegume; //oTR est un objet auquel on assigne la propriété legume
    alert (oTR.legume);
    C'est parce que javascript est un langage orienté objet j'imagine?

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 651
    Points : 11 145
    Points
    11 145
    Par défaut
    Petite correction de ton code. C'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alert (oTR.legume);


    oui tu peux ajouter des propriétés à un objet. Par contre, tu ne peux pas redéfinir les propriétés natives d'un objet.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 123
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Auteur Voir le message
    Petite correction de ton code. C'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alert (oTR.legume);
    C'est corrigé

    Merci pour ta réponse rapide et efficace Auteur!

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

Discussions similaires

  1. Comment transmettre des paramètres à un thread?
    Par Pragmateek dans le forum Threads & Processus
    Réponses: 4
    Dernier message: 16/03/2006, 14h12
  2. Comment passer des paramètre a OpenRecordset
    Par molarisapa dans le forum Access
    Réponses: 2
    Dernier message: 09/03/2006, 17h14
  3. [C#] Comment joindre des arguments à un évènement ?
    Par Amnesiak dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/03/2006, 15h17
  4. Réponses: 2
    Dernier message: 02/02/2006, 18h46
  5. Réponses: 7
    Dernier message: 30/12/2004, 12h01

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