В jQuery привязка hadler's события является событием, генерирующим элемент DOM (это указывает на dom элемент). В прототипе для изменения привязки обработчика событий можно использовать функцию bindAsEventListener; Как я могу получить доступ и к экземпляру и к элементу DOM от обработчика событий?
Подобный тому, Как я могу связать обработчик событий с экземпляром в JQuery?
function Car(){
this.km = 0;
$("#sprint").click(this.drive); //setup event handler
}
// event handler
// in it I need to access both the clicked element
// and the binding object (instance of car)
Car.prototype.drive = function(){
this.km += 10; // i'd like to access the binding (but jq changes it)
this.css({ // also the element
left: this.km
});
// NOTE that is inside this function I want to access them not elsewhere
}
var car = new Car();
Хм, может быть, вы можете использовать jQuery.proxy ()?
Значение this
в противном случае указывало бы (то есть элемент, к которому прикреплен обработчик) также передается в свойстве currentTarget
объекта объект события. Итак, если вы используете функцию привязки, о которой вы говорили:
Car.prototype.drive = function(e) {
// this will be your car object
// e.currentTarget will be the element that you attached the click handler to
}
хорошо, вот вы где:
var car = {km:0};
$("#sprint").click(function(){
car.km += 10;
$(this).css({ left: car.km });
});
Я не тестировал это, но должно быть прямо, или что касается того, где вы пошли не так, то в вашем «this», который смотрит на элемент «sprint», а не на объект «car».
Просто привяжите переменную к этому
и используйте это.
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
}
Обработчик передает элемент экземпляру