Как я могу привязать обработчик событий к экземпляру в jQuery? - PullRequest
0 голосов
/ 23 сентября 2008

Я пытаюсь привязать событие к «методу» определенного экземпляра «класса» Javascript, используя jQuery. Требование заключается в том, что я в обработчике событий должен иметь возможность использовать ключевое слово «this» для ссылки на экземпляр, с которым я изначально связал событие.

Более подробно, скажем, у меня есть "класс" следующим образом:

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

И экземпляр:

var myCar = new Car("Bob");

Теперь я хочу привязать событие к «методу» привода моей машины, чтобы при каждом нажатии, например, кнопки «метод» привода, вызывалось для экземпляра myCar «класса» автомобиля.

До сих пор я использовал следующую функцию для создания замыкания, которое позволяет мне удобно обращаться к членам экземпляра, используя ключевое слово "this" в моих "методов".

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

Я использовал это следующим образом:

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

Как мне сделать что-то подобное с JQuery?

Я специально спрашиваю о том, чтобы связать «это» с назначенным экземпляром, со всем остальным, с чем я могу справиться самостоятельно.

Ответы [ 2 ]

3 голосов
/ 23 сентября 2008

Просто используйте анонимную функцию:

$("#myButton").click(function() { myCar.drive(); });
0 голосов
/ 08 октября 2015

Попробуйте это:

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

var $btn = $(this);

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

     // Do whatever you want.

    });
});

Здесь вы сначала создаете цикл для всех элементов #myButton (что неправильно в вашем примере, вместо этого вы должны использовать Class), например:

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

Затем мы прикрепляем обработчик события click ко всем из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...