Избегайте var _this = this; при написании обработчиков событий jQuery - PullRequest
6 голосов
/ 12 октября 2011

Не очень важный вопрос, но здесь мы идем ..

Как избежать использования var _this = this в обработчиках событий jQuery? то есть я не люблю делать:

var _this = this;
$(el).click(function (event) {
  //use _this to access the object and $(this) to access dom element
});

Следующие 2 способа не идеальны

$(el).click($.proxy(function (event) {
  //lost access to the correct dom element, i.e. event.target is not good enough (see http://jsfiddle.net/ne3n3/1/)
}, this));

$(el).click({_this: this}, function (event) {
  //have access to $(this) and event.data._this, but it seems too verbose
})

В идеале я хотел бы сделать что-то вроде

$(el).click(function (event) {
  this.method(); // this is accessing the object
  event.realTarget; // this is accessing the dom element
}, this); // <= notice this

Ответы [ 3 ]

2 голосов
/ 12 октября 2011

Я не совсем уверен, что правильно вас понимаю, но если вам нужна ссылка на функцию, в которой вы работали при создании функции обратного вызова, вы могли бы сделать это так (хотя это не совсем так)сохраняя вам любой набор):

$(el).click(function(parent) {
    return function() {
        // Use parent instead of _this
    }
}(this))
2 голосов
/ 12 октября 2011

http://api.jquery.com/event.currentTarget/ говорит:

"Это свойство обычно равно значению этой функции."

http://jsfiddle.net/ne3n3/2/

0 голосов
/ 12 октября 2011

Нельзя присвоить переменную this как объекту, так и элементу DOM.Я рекомендую присвоить объекту переменную, отличную от this.

. Лучший способ получить доступ как к объекту, так и к элементу DOM будет выглядеть примерно так:

$(el).click($.proxy(function (event) {
  // can reference DOM element with this i.e. $(this)
  // can reference your object with the variable myObject
  //     i.e. $(this).val(myObject.data);
}, myObject));

или, может быть, так:

$(el).click({myObject: this}, function (event) {
  //have access to $(this) and event.data.myObject, but it seems too verbose
});

Использование переменной, отличной от this, в функции обработки событий щелчка также сделает ваш код более понятным, поскольку большинство людей ожидают, что this будет ссылаться на элемент DOM и иметьничего общего с вашим пользовательским объектом.

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