2010-07-22 80 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");