2010-07-22 156 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

這是元素的ID?您缺少#號。 – Adam 2010-07-22 17:25:42

+0

也發佈了一些相關的html,所以它會更清晰...... – gillyb 2010-07-22 17:26:32

+1

函數內部,'this'引用this_meelement(實際上是指它的DOM元素)。大多數(每個?)jQuery函數都需要回調函數,'this'是指您調用函數的(DOM)元素。 – 2010-07-22 17:29:45

回答

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)'。 – 2010-07-22 17:30:20

0

我編輯了你的代碼,我希望它有幫助。

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

是someotherelement一個ID?如果是這樣,你就錯過了#...

this.someotherelement = $("#someotherelement");