8
votes

JQuery "this" problème de liaison sur le gestionnaire d'événements (équivalent de BindaseventListener dans le prototype)

Dans JQuery Un événement Binding de Hadler est l'événement générant l'élément DOM (ce point à l'élément DOM). Dans le prototype de modification de la liaison d'un gestionnaire d'événements, on peut utiliser le BindaseventListener fonction; Comment puis-je accéder à la fois à l'instance et à l'élément DOM d'un gestionnaire d'événements?
Semblable à Comment puis-je lier un événement gestionnaire à une instance de jQuery? xxx


0 commentaires

4 Réponses :


0
votes

La valeur Ce code> signalait autrement (c'est-à-dire l'élément que le gestionnaire est attaché à) est également transmis dans la propriété courantTarget code> de l'objet événement. Donc, si vous utilisez la fonction de liaison, vous avez parlé de:

Car.prototype.drive = function(e) {
    // this will be your car object
    // e.currentTarget will be the element that you attached the click handler to
}


1 commentaires

Je ne peux pas utiliser BindaseventListener comme par prototype.



0
votes

OK Ici vous êtes:

var car = {km:0};
$("#sprint").click(function(){
    car.km += 10;
    $(this).css({ left: car.km });
});


1 commentaires

C'est exactement ce que j'essaie d'éviter :)



1
votes

juste lier une variable à ce code> et l'utiliser.

function Car(){
    this.km = 0;
    var that = this;
    $("#sprint").click(function(){
         that.drive(this);
    });
}


Car.prototype.drive = function(element){
    this.km += 10; // i'd like to access the binding (but jq changes it)
    this.css({ // also the element
        left: this.km 
    }); 
    alert(element.innerHTML);
    // NOTE that is inside this function I want to access them not elsewhere
}


5 commentaires

J'ai pensé que cela résoudrait-il moi-même :) Mais j'ai mis à jour la réponse avec comment accéder à la fois à l'instance de classe et à l'élément


L'autre question a aussi ce genre de réponse mais je le trouve assez moche. Est-ce le moyen proposé de le faire dans la communauté de JQuery? Il doit y avoir quelque chose de mieux ... ou est juste une question de goût personnel. Je vais laisser cela rôti un peu plus et acceptera probablement votre réponse.


L'auditeur recevra probablement un objet contenant une référence à l'élément qui a déclenché l'événement, vous pouvez probablement utiliser cela. Mais je ne suis pas sûr lequel je trouve le plus laide ..


Oui, mais le problème est que je perds la référence à l'objet actuel (à cause de ce swich) l'élément que je peux obtenir via l'événement.CurrentTarget


ceci est lié à la portée, et donc pour que vous puissiez avoir ce point à la bonne portée, vous devez soit avoir l'objet correct sur le côté gauche de la gauche de la '.' Opérateur, ou vous devrez utiliser .Call ou .Apply pour appliquer la portée à la fonction que vous souhaitez appeler. La chose la plus facile si elle est de garder l'objet correct sur le côté gauche en introduisant une variable scopée comme que .



4
votes

hmm, peut-être que vous pouvez utiliser jQuery.proxy ()?

http://api.jquerery.com/jquery.proxy/


0 commentaires