2010-10-10 10 views
1

J'ai souvent besoin de créer des événements uniques qui ne sont pas nécessaires après une seule exécution. La façon dont je fais est quelque chose comme:Comment gérer des événements JavaScript simples de manière intuitive?

A.prototype.someMethod = function() { 
    var me = this; 
    this.onWindowMouseUpFunction = function() { 
     me.onWindowMouseUp.apply(me, arguments); 
    }; 
    window.addEventListener('mouseup', this.onWindowMouseUpFunction, false); 
} 

A.prototype.onWindowMouseUp = function() { 
    window.removeEventListener('mouseup', this.onWindowMouseUpFunction, false); 
} 

Cependant, étant donné que la logique d'événement est divisé en deux méthodes et je ne peux pas utiliser les fonctions anonymes et ont plutôt affecter la fonction à une variable, je commence à penser qu'il y doit être une meilleure façon de le faire, non?

Répondre

2

Je pense que votre meilleur coup est de créer une fonction de wrapper qui fait tout cela automatiquement.

Quelque chose comme

function addOneTimeEventListener(objToListenOn, eventtype, callbackfunction){ 
var callThenRemove = function() { 
    callbackfunction(); 
    objToListenOn.removeEventListener(eventtype, callThenRemove, false); 
}; 
objToListenOn.addEventListener(eventtype, callThenRemove, false); 
}; 

Utilisation

addOneTimeEventListener(window, "mouseup", function(){/*tada, anonymus function*/}); 
0

Il suffit de faire ceci:

A.prototype.someMethod = function() { 
    function onMouseUp() { 
     // do stuff ... 
     // then remove event listener  
     window.removeEventListener('mouseup', onMouseUp, false); 
    } 
    window.addEventListener('mouseup', onMouseUp, false); 
} 

Il y a moins de frappe impliqué et votre écouteur d'événement devient privé.