Question

J'essaie 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, puisse utiliser le paramètre "this". mot clé pour faire référence à l'instance à laquelle j'ai lié l'événement à l'origine.

De manière plus détaillée, supposons que j'ai un "class". comme suit:

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

Et une instance:

var myCar = new Car("Bob");

Je souhaite maintenant lier un événement au lecteur "méthode". de ma voiture de sorte que, chaque fois que je clique sur un bouton, par exemple, la méthode "Méthode" est appelé sur l’instance myCar de la voiture "classe".

Jusqu'à présent, j'utilisais la fonction suivante pour créer une fermeture qui me permettait d'accéder facilement aux membres de l'instance à l'aide de l'option "this". mot clé 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 souhaite spécifiquement associer "ceci". avec une instance désignée, l’autre élément cruel que je peux gérer seul.

Était-ce utile?

La solution

Utilisez simplement une fonction anonyme:

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

Autres conseils

Essayez ceci:

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

var $btn = $(this);

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

     // Do whatever you want.

    });
});

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

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top