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 :

Evenement DOM2 et objet


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 209
    Points : 120
    Points
    120
    Par défaut Evenement DOM2 et objet
    Bonsoir,
    Je souhaite en utilisant la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var jlc;
    jlc = {};
    jlc.addEvent = function (obj, evType, fn) {
    	if (obj.addEventListener){
    		obj.addEventListener(evType, fn, false);
    		return false;
    	} 
    	else if (obj.attachEvent){
    		var r = obj.attachEvent("on"+evType, fn);
    		return false;
    	} 
    };
    Évidemment, c'est un objet qui dans une méthode lance l’événement. ET la fonction de traitement de l'objet est une méthode de l'objet lui même :
    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
    16
    17
    18
    19
    20
    21
    function Cc(){
    		this.pa = document.getElementById('pa');
    		this.pv = document.getElementById('pv');
    		this.cx = document.getElementById('cx');
    		this.mb = document.getElementById('mb');
    		this.tva = document.getElementById('tva');
    		this.tq = document.getElementById('tq');
    		this.init();
    	}
    	Cc.prototype.init = function(){
    		this.vtva = parseFloat(jlc.SelectVal('tva'));
    		this.vpa = parseFloat(this.pa.value)||false;
    		this.vpv = parseFloat(this.pv)||false;
    		this.vcx = parseFloat(this.cx)||false;
    	};
    	Cc.prototype.comportement = function(){
    		jlc.addEvent(this.tg,'click',this.test);
    	};
    	Cc.prototype.test = function(){
    		alert('Dedans la méthode');
    	};
    Pourtant, le test ne fonctionne pas...
    Une idée ?
    Merci

  2. #2
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Voici un exemple fonctionnel :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <html>
    <head>
    <style>
    div{border:solid;};
    </style>
    <script>
            var jlc = {SelectVal:function(){}};
            jlc.addEvent = function (obj, evType, fn) {
                    if (obj.addEventListener){
                            obj.addEventListener(evType, fn, false);
                            return false;
                    } 
                    else if (obj.attachEvent){
                            var r = obj.attachEvent("on"+evType, fn);
                            return false;
                    } 
            };
            function Cc(){
                    this.pa = document.getElementById('pa');
                    this.pv = document.getElementById('pv');
                    this.cx = document.getElementById('cx');
                    this.mb = document.getElementById('mb');
                    this.tva = document.getElementById('tva');
                    this.tq = document.getElementById('tq');
                    this.init();
            }
            Cc.prototype.init = function(){
                    this.vtva = parseFloat(jlc.SelectVal('tva'));
                    this.vpa = parseFloat(this.pa.value)||false;
                    this.vpv = parseFloat(this.pv)||false;
                    this.vcx = parseFloat(this.cx)||false;
            };
            Cc.prototype.comportement = function(){
                    jlc.addEvent(this.tq,'click',this.test);
            };
            Cc.prototype.test = function(){
                    alert('Dedans la méthode');
            };
     
    window.onload = function(){ 
            var c = new Cc();
            c.comportement();
    };
    </script>
    </head>
    <body>
    <div id=pa>pa</div>
    <div id=pv>pv</div>
    <div id=cx>cx</div>
    <div id=mb>mb</div>
    <div id=tva>tva</div>
    <div id=tq>tq(cliquable)</div>
    </body>
    </html>

    Explications :

    1) Dans "init" tu appelles "jlc.SelectVal('tva')", SelectVal n'existait nulle part dans ton code.

    2) Dans "comportement" tu appelais "jlc.addEvent(this.tg,'click',this.test);" mais l'objet "jlc" n'avait aucune propriété nommée "tg", je l'ai donc modifié en "tq" pour correspondre à un des tes éléments initié dans le constructeur.

    3) Il est important de ne pas oublier le "new" lors de l'appel au constructeur de Cc pour créer l'objet (le "this") et j'ai aussi ajouté un appel à "comportement" qui ne se trouvait nulle part.

    4) Finalement j'ai lancé mes remarques du point (3) dans une fonction qui se lance après le chargement de la page pour être certains que tes éléments du DOM soient déjà existants.


    J'espère qu'avec toutes ces remarques (j'imagine que certaines étaient déjà appliquées dans ton code complet) tu arriveras à faire fonctionner ce que tu veux.


    Willpower.

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 209
    Points : 120
    Points
    120
    Par défaut
    Effectivement, une bonne part des préconisations sont déjà dans le code.
    J'effectue encore quelques tests.
    Merci

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

Discussions similaires

  1. Evenements dans un objet COM réalisé en c#
    Par warenbe dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/09/2009, 17h20
  2. Creer un evenement pour un objet
    Par toure32 dans le forum Delphi
    Réponses: 11
    Dernier message: 17/11/2006, 19h36
  3. [VB.Net] l'utilisation des Evenements sur Objet
    Par vijeo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 06/03/2006, 12h44
  4. Objet.evenement --> Erreur : Non implémenté
    Par Darkdaemons dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/09/2005, 17h24
  5. Evenement sur objet dynamique
    Par CanardJM dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/11/2004, 13h56

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