Как получить доступ к атрибуту в функции обратного вызова jQuery? - PullRequest
2 голосов
/ 28 августа 2011
var some_name =
{
    moving:false,

    show : function ()
    {
        this.moving = true;

        $('element').slideDown(5000, function ()
        {
            this.moving = false; //How to access to attribute "moving" of class some_name?
        });
    },
}

Вопрос в коде.

Ответы [ 3 ]

6 голосов
/ 28 августа 2011

Вы можете привязать функцию обратного вызова к текущему контексту:

$('element').slideDown(5000, $.proxy(function() {
    this.moving = false;
}), this); // "this" inside of the function will be this "this"

См. jQuery.proxy


В качестве альтернативы вы можете сделать это:

this - текущий контекст, его значение зависит от того, как вызывается функция.Вы можете присвоить this переменной вне функции и использовать эту переменную вместо:

var that = this;
$('element').slideDown(5000, function() {
    that.moving = false; //use that instead of this here
});
0 голосов
/ 28 августа 2011

В обратных вызовах события this относится к event.target или элементу, который захватил событие.

Вы можете воспользоваться преимуществами замыканий в javascript и получить доступ к атрибуту moving, например так:

show : function ()
{
    var moving = true;

    $('element').slideDown(5000, function ()
    {
        moving = false;
    });
},

Примечание , однако, что этот moving будет отличаться от первого moving, который живет в some_name

0 голосов
/ 28 августа 2011

Используйте moving вместо this.moving (в обоих случаях)

Переменные связаны с контекстом, когда они используются, поэтому даже внутри вашего обратного вызова события вы можете получить доступ к указанным выше переменным.

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