2013-09-23 181 views
-1

我有一個asp.net應用程序,其中包含一個鏈接,該鏈接在點擊時打開一個窗口。打開一個新窗口,點擊每個鏈接

實施例:
< A HREF = 「URL」 的onclick = 「window.open(URL,名稱,參數)」 >

這工作得很好。它根據需要打開一個窗口。我想要的是應用程序打開窗口的次數與單擊鏈接並在單獨的窗口中一樣多。

1st click打開第一個窗口。
第二次點擊打開同一鏈接的第二個窗口。
第三次點擊打開相同鏈接的第三個窗口。

我想每個點擊一個窗口最多打開5個同一鏈接的窗口。如果可能的話,我會如何實現這一目標?

+0

爲什麼從可用性的角度來看,你想這樣做?我看不到用戶不會對此感到惱火的情況。 – Tim

+0

@Tim。這是客戶的要求。他們想限制在任何給定時間可以打開的窗口數量。 – ConfusedDiva

回答

0

有一個鏈接列表,它的數量。每次點擊都會嘗試找到列表中的鏈接,增加計數。如果在列表中找不到鏈接,只需將其添加到列表中,計數爲1.

<a href="url" onclick="openWindow(url, name, parameters)"> 

    <script> 
    var countLinkPair = []; 

    function openWindow(url, name, parameters) 
    { 
     var flag = false; 
     for (var i = 0; i < countLinkPair.length; i++) { 
      var obj = countLinkPair[i]; 
      if (obj.link == url) { 
       if (obj.count<=5) { 
        window.open(url, name, parameters); 
       } 
       obj.count++; 
       flag = true; 
       break; 
      } 
     } 

     if (!flag) { 
      countLinkPair.push({link:url, count:1}); 
     } 
    } 
    </script> 
1

這並不難。無論如何,您必須跟蹤窗口,以便您可以在其中一個關閉時更新您的計數。

更簡單的方法:輪詢他們的狀態(基於事件的跟蹤是一場噩夢)。

<script> 
var openWindows = {}; 
var openWindow = function (url, name, specs) { 
    var count = openWindows[name] || 0; 
    if (count < 5) { 
     var w = window.open(url, name + count, specs); 
     var interval = setInterval(function() { 
      if(!w || w.closed){ 
       clearInterval(interval); 
       openWindows[name] = openWindows[name] - 1; 
       console.log('Closed a window for button ' + name); 
      } 
     }, 100); 
     openWindows[name] = count + 1; 
    } 
    console.log('Opened a window for button ' + name); 
}; 
</script> 
<!-- Usage --> 
<input id="btn" name="btn" type="button" onclick="openWindow('http://www.google.it', 'google', 'width=200,height=100');" /> 

腳本基本上存儲您提供的名稱,改變它,使其獨特的(否則彈出窗口會重疊),當窗口對象不再有開始定時輪詢,檢查每100毫秒,並停止或窗戶關閉。我添加了一些控制檯垃圾郵件,以使其更清晰。

重要計數將無法在刷新頁面時存活。這是一個只能安全照顧服務器端的問題。

相關問題