2008-09-22 4 views
0

J'essaye de lier un événement à une "méthode" d'une instance particulière d'une "classe" Javascript en utilisant JQuery. L'exigence est que je dans le gestionnaire d'événements devrait être en mesure d'utiliser le mot-clé "this" pour se référer à l'instance à laquelle je liais initialement l'événement.Comment lier un gestionnaire d'événements à une instance dans JQuery?

De façon plus détaillée, que j'ai une « classe » comme suit:

function Car(owner) { 
    this.owner = owner; 
} 
Car.prototype = { 
    drive: function() { 
    alert("Driving "+this.owner+"s car!"); 
    } 
} 

Et une instance: « méthode »

var myCar = new Car("Bob"); 

Je veux maintenant lier un événement à l'unité de ma voiture de sorte que quand jamais je clique sur un bouton par exemple le lecteur "méthode" est appelé sur l'instance myCar de la "classe" de voiture. Jusqu'à présent, j'utilisais la fonction suivante pour créer une fermeture qui me permettait d'accéder confortablement aux membres de l'instance en utilisant le mot clé "this" dans mes "méthodes".

function createHandler(obj, method) { 
    return function(event) { 
    return obj[method](event||window.event); 
    } 
} 

Je l'ai utilisé comme suit:

document.getElementById("myButton") 
    .addEventListener("click", createHandler(myCar,"drive")); 

Comment puis-je accomplir quelque chose comme ça avec JQuery? Je demande spécifiquement d'associer "ceci" à une instance désignée, l'autre étant tout ce que je peux gérer seul.

+0

Jetez un oeil à ceci: http://stackoverflow.com/questions/4289045/jquery-attach-event-to-method-in-instance – Remotec

Répondre

3

il suffit d'utiliser une fonction anonyme:

$("#myButton").click(function() { myCar.drive(); }); 
+2

cela ne fonctionnera que pour une instance. s'il y a plusieurs instances de Car, cela ne marchera pas. – sonofdelphi

0

Essayez ceci:

$("#myButton").each(function() { 

var $btn = $(this); 

    $btn.on('click',function(){ 

    // Do whatever you want. 

    }); 
}); 

Ici vous créez une boucle pour cibler tous les éléments #myButton (ce qui est faux dans votre exemple, vous devriez être en utilisant Class à la place) comme:

$(".myButton").each(... 

Puis nous attachons le gestionnaire d'événements click à chacun d'entre eux.

Questions connexes