2013-09-23 3 views
-1

У меня есть asp.net приложение, которое содержит ссылку, которая открывает окно при нажатии.Открыть новое окно для ссылки на каждый клик

Пример:
< A HREF = "URL" OnClick = "window.open (URL, название, параметры)" >

Это прекрасно работает. Он открывает окно по мере необходимости. Я хочу, чтобы приложение открывало окно столько раз, сколько щелкнула ссылка и в отдельном окне.

Первый щелчок открывает первое окно.
2-й щелчок открывает второе окно той же ссылки.
Третий клик открывает третье окно той же ссылки.

Я хочу, чтобы не более 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');" /> 

Сценарий в основном хранит имя вы предоставляете, изменяет его, чтобы сделать его уникальным (в противном случае всплывающих окон будут перекрываться) и начинает синхронизированный опрос, который проверяет каждый 100msec и останавливается, когда объект окна больше не существует или окно закрыто. Я добавил несколько консольных спамов, чтобы сделать их более ясными.

Важная информация Счета не смогут пережить обновление страницы. Это проблема, которую можно безопасно заботиться только о стороне сервера.

Смежные вопросы