2012-05-10 69 views
1

我用超链接的点击事件打开一个弹出窗口......弹出窗口包含来自服务器的记录。jquery/jscript防止打开多个弹出窗口

问题是,当我快速点击时,一次有多个弹出窗口。 有一种方法可以防止这种情况发生?在可以打开一个弹出

我的代码:

$('.wrapper_form a.add').click(function(e) 
{ 
    e.preventDefault(); 

    if(typeof(currentPopup) == 'undefined' || currentPopup.closed) 
    { 
     url = 'server_page.aspx'; 
     currentPopup = window.open(url,'server','height=500,width=800'); 
     if (window.focus) {currentPopup.focus()} 
    } 
    else 
    { 
     currentPopup.focus(); 
    } 
}); 
+0

更改该变量您的弹出窗口只需要发生一次?如每页加载一次? –

+0

应该打开弹出式窗口的单个实例 – csotelo

回答

4

这是一种方法。不是最好的解决方案,但它应该工作。这段代码要做的是防止点击多次链接,并为每次点击打开一个新的实例。此代码不允许窗口在1/2间隔内多次打开,当然您可以更改时间。

var hopefullyThisIsNotInGlobalScope = false; 

$('.wrapper_form a.add').click(function(e) 
{ 
if (hopefullyThisIsNotInGlobalScope) 
{ 
return false; 
} 
    hopefullyThisIsNotInGlobalScope = true; 
    setTimeout(function() { hopefullyThisIsNotInGlobalScope = false; }, 500); 
    e.preventDefault(); 

    if(typeof(currentPopup) == 'undefined' || currentPopup.closed) 
    { 
     url = 'server_page.aspx'; 
     currentPopup = window.open(url,'server','height=500,width=800'); 
     if (window.focus) {currentPopup.focus()} 
    } 
    else 
    { 
     currentPopup.focus(); 
    } 
}); 

假设在弹出的是同一个域中的窗口启动它,你也许能连接到窗口全局变量来代替hopefullyThisIsNotInGlobalScope变量。然后,您可以在弹出窗口启动时设置该变量,并使用browser unload event

+0

我会尝试一下代码,然后我回答(编辑)... – csotelo

+0

这是否适合您? –

+0

很好的解决方案...效果很好,非常感谢! – csotelo