2009-12-29 5 views
0

Il y a cette pièce dans la base de code, je travaille sur:MooTools/JS: bindWithEvent

this.element.addEvent('click', this.clickEvent.bindWithEvent(this)); 

Je veux changer pour que l'événement click fait que la fenêtre est chargé en premier. J'ai donc essayé:

var t = this; 
this.element.addEvent('click', function() { 
    window.addEvent('load', function() { 
     t.clickEvent.bindWithEvent(t)); 
    }); 
}); 

Cela ne semble pas fonctionner. Qu'est-ce que je rate?

Répondre

2

Vous ajoutez un gestionnaire à l'événement load lorsque l'utilisateur clique sur quelque chose, _after the L'événement load` a déjà été déclenché. Par conséquent, rien ne se passe.

Vous devez probablement ajouter le gestionnaire click à l'intérieur d'un gestionnaire d'événements pour l'événement load. (Échanger les deux addEvent lignes)

0

dans Mootools vous ont tendance à utiliser domready et non charge mais essentiellement, ce faisant, comme le suggère ne fonctionnera pas car il manque le contexte ici:

cela. element.addEvent ('click', this.clickEvent.bindWithEvent (this));

si vous travaillez dans une classe ici - donc, assurez-vous instancier sur l'événement domready à la place, quelque chose comme ...

window.addEvent("domready", function() { 
    // whatever you need to do... 
    var foo = new myClass($("someElement"), {option: value}); // example instantiation 
    // if the binding is not in the .initialize, then call the right method... 
    // foo.bindMyEvents(); 
}); 

tant que l'instance de classe est dans domready, tu vas bien. Si ce n'est pas une option, voyez quelle méthode lie les événements et appelez cela sur le domready à la place.