2011-07-20 40 views
1

如何在element的jQuery点击处理程序内访问isExpanded,collapsedHeightexpandedHeight
现在编写的方式将不起作用,因为this意味着点击处理程序内的其他内容比其外部的其他内容更多。如何访问功能中功能的属性

function CoolSelect(element) 
{ 
    this.element=element; 
    this.isExpanded=false; 
    this.collapsedHeight=$(element).height(); 
    this.expandedHeight=this.collapsedHeight+$('ul',element).height(); 

    $(this.element).click(function() 
    { 
     var newHeight; 
     if(this.isExpanded){newHeight=this.collapsedHeight;} 
     else{newHeight=this.expandedHeight;} 
     $(this.element).animate({height:newHeight},100,'liniar'); 
    }); 
} 

谢谢。

回答

3

this的值复制到外部函数中的另一个变量。

var that = this; 

然后在内部函数中使用that

+0

谢谢昆汀。 – Francisc

+0

出于好奇,如果我只是将每个类属性声明为'var',并且只是在内部函数中访问它,会不会更容易? – Francisc

3

您需要保存对此的引用。 此代码使用var that = this;

function CoolSelect(element) 
{ 
    this.element=element; 
    this.isExpanded=false; 
    this.collapsedHeight=$(element).height(); 
    this.expandedHeight=this.collapsedHeight+$('ul',element).height(); 
    var that = this; 

    $(this.element).click(function() 
    { 
     var newHeight; 
     if(that.isExpanded){newHeight=that.collapsedHeight;} 
     else{newHeight=that.expandedHeight;} 
     $(that.element).animate({height:newHeight},100,'liniar'); 
    }); 
} 
+0

谢谢,石灰。我选择了首先发布的答案。否则,你的情况一样好。 – Francisc

+1

16秒使所有的区别:D – William

+0

我没有其他标准。哈哈。 – Francisc