jQuery “эта” обязательная проблема об обработчике событий (эквивалентный из bindAsEventListener в прототипе)

В 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();

8
задан Community 23 May 2017 в 12:16
поделиться

4 ответа

Хм, может быть, вы можете использовать jQuery.proxy ()?

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

4
ответ дан 5 December 2019 в 23:14
поделиться

Значение 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
}
0
ответ дан 5 December 2019 в 23:14
поделиться

хорошо, вот вы где:

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

Я не тестировал это, но должно быть прямо, или что касается того, где вы пошли не так, то в вашем «this», который смотрит на элемент «sprint», а не на объект «car».

0
ответ дан 5 December 2019 в 23:14
поделиться

Просто привяжите переменную к этому и используйте это.

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
}

Обработчик передает элемент экземпляру

1
ответ дан 5 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: