2013-02-11 52 views
0

我已经定义了一个JavaScript“弹出窗口”使用类似的代码级以下:调用类方法 - jQuery的

function Popup(strPopContID) 
{ 
    this.strPopupContaineriD=strPopContID; 

    /* code creates popup with ID equal to value of strPopContID with 'close button' in 
     the top bar of popup with class 'CloseButton'*/ 

    classThisPopup=this; 
    $('#'+this.strPopupContaineriD+' .CloseButton').click(function(){ 
     classThisPopup.ClosePopup(); 
    }) 


    this.ClosePopup=function(){ 
     $('#'+this.strPopupContaineriD).remove(); 
    } 
} 

现在,如果我创造我的类的两个实例:

Popup1 = new Popup('FirstContainer'); 
Popup2 = new Popup('SecondContainer'); 

我可以使用Popup1.ClosePopup()和Popup2.ClosePopup()关闭它们,但单击关闭按钮只会关闭一个框。我似乎明白,从JQuery调用ClosePopup作为'click'选项会弄乱变量作用域,这就是为什么我的'ClosePopup'函数只对创建的最新弹出窗口产生反应的原因,但是有什么办法可以解决这个问题,而无需通过任何“ClosePopup”的参数?

+0

在构造函数中Popup1 = new Popup();不应该使用Popup1 = new Popup(“mypopup1”)等参数; – 2013-02-11 13:21:30

+0

是的,这只是我在发布问题时错过了,容器名称在我的代码中创建的很好。编辑。 – user2061056 2013-02-11 13:28:14

回答

0

对于classThisPopup变量,您缺少var,因此它在全局对象(窗口)上声明。

一旦你改变classThisPopup=this;var classThisPopup=this;它应该工作。

+0

哦,我的天 - 我怎么错过了?!非常感谢你。 – user2061056 2013-02-11 13:36:03