2010-07-22 3 views
0

Так что у меня этот код:Атрибут родительского объекта доступа jQuery?

function theObject(){ 
    this.someelement = $("#someelement"); 
    this.someotherelement = $("someotherelement"); 
    this.someelement.fadeOut(500, function(){ 
     this.someotherelement.attr("title", "something"); 
     this.someelement.fadeIn(500); 
    }); 
} 

по какой-то причине this.someotherelement не определена. Я предполагаю, потому что это завернуто в function(){}?

+0

Это идентификатор элемента? Вам не хватает знака #. – Adam

+0

опубликуйте некоторые из соответствующих html, так что это станет более понятным ... – gillyb

+1

Внутри функции 'this' относится к' this.someelement' (фактически к его элементу DOM). С большинством (каждый?) Функцией jQuery, которая принимает обратный вызов, 'this' относится к элементу (DOM), на который вы вызываете функцию. –

ответ

1

Это связано с проблемой определения области использования JavaScript. Создание функции создает новую область для this, которая делает this ссылкой на функцию. Вы можете исправить это, выполнив следующие действия:

function theObject(){ 
    this.someelement = $("#someelement"); 
    this.someotherelement = $("someotherelement"); 

    // bind this to that (what?). This way, this will still be accessible inside 
    // the new function's scope as that 
    var that = this; 
    this.someelement.fadeOut(500, function(){ 
    that.someotherelement.attr("title", "something"); 
    that.someelement.fadeIn(500); 
    }); 
} 
3

Внутри функции this означает что-то еще. Вы могли бы его захватить, хотя:

this.someotherelement = $("someotherelement"); 
var _this = this; 
this.someelement.fadeOut(500, function(){ 
    _this.someotherelement.attr("title", "something"); 
    _this.someelement.fadeIn(500); 
}); 
+0

Вместо '_this.someelement' вы также можете использовать' $ (this) '. –

0

Я отредактировал ваш код, надеюсь, это поможет.

function theObject(){ 
    var someelement = $("#someelement"); 
    var someotherelement = $("#someotherelement"); 
    someelement.fadeOut(500, function(){ 
     someotherelement.attr("title", "something"); 
     someelement.fadeIn(500); 
    }); 
} 
0

является идентификатором ID? Если это так, вам не хватает # ...

this.someotherelement = $("#someotherelement"); 
Смежные вопросы