Доступ к коллекции открытых окон javascript

esomkin

Новичок
Доступ к коллекции открытых окон javascript

Здравствуйте

Из главного окна поочередно в цикле открываются несколько дочерних окон.
Объекты окон присваиваются массиву wnd[] (глобальный).
PHP:
 var
  wnd_name = '';

  for(var i in selected_array)
   {
     wnd_name = 'wnd_' + i.toString();

     wnd[i] = window.open('/?itemID=' + itemID.toString() + '&action=edit&id=' + (selected_array[i]).toString(), wnd_name, 'top=0px, left=0px');
   }
В каждом окне присутствует кнопка, по нажатию на которую выполняется функция
PHP:
 function save_and_exit(form_id)
  {
    var
      form_obj = document.getElementById(form_id),
      parent_wnd;

     form_obj.submit(true);

     if(wnd.length == 1)
      {
        parent_wnd = window.opener;
        parent_wnd.location.reload(true);
      }

     window.close();
    }
Идея такова, по нажатию должна отправляться форма из данного дочернего окна, после этого если окно последнее из коллекции дочерних окон, то должна произойти перегрузка документа в главном окне, после чего дочернее окно должно закрыться.
Однако на деле, дочернее окно закрываться не желает, и перегружать документ в главном окне тоже не хочет)))
Может кто сталкивался с подобным- поскажите куда копать?

С уважением Евгений
 

dimagolov

Новичок
esomkin, for(var i in selected_array) не годится для перебора массива в JS, так как перебирает все свойства объекта, к которым относится и length. перебирай традиционно for (var i=0; i < selected_array.length; i++)

ну а по вопросу: с чего ты решил, что массив будет сокращаться? я тебе скажу больше, даже если окно закроется, для меня не очевидно, что JS объект его умрет исходя из того, что на него есть ссылка (хотя могу и заблуждаться) из главного окна. Но даже если умрет (ссылка станет null), она все равно будет занимать ячейку в массиве длина которого не изменится.

без пояснения того, как и где определена ф-я save_and_exit ничего нельзя сказать правомочно ли обращение к массиву wnd из нее и что будет сабмитить вызов form_obj.submit
 

esomkin

Новичок
Автор оригинала: dimagolov
esomkin, for(var i in selected_array) не годится для перебора массива в JS, так как перебирает все свойства объекта, к которым относится и length. перебирай традиционно for (var i=0; i < selected_array.length; i++)

ну а по вопросу: с чего ты решил, что массив будет сокращаться? я тебе скажу больше, даже если окно закроется, для меня не очевидно, что JS объект его умрет исходя из того, что на него есть ссылка (хотя могу и заблуждаться) из главного окна. Но даже если умрет (ссылка станет null), она все равно будет занимать ячейку в массиве длина которого не изменится.

без пояснения того, как и где определена ф-я save_and_exit ничего нельзя сказать правомочно ли обращение к массиву wnd из нее и что будет сабмитить вызов form_obj.submit
Функция save_and_exit определена в секции <script>...</script> ниже глобального определения var wnd = new Array()
Насчет перебора массива - спасибо, честно говоря не знал, насчет сокращения массива - проверю, form_obj.submit сабмитит форму в дочернем окне.
А вот насчет закрытия окна - не может быть так, что перегрузив документ после сабмита формы скрипт вообще дальше сабмита работать не будет? (по причине того, что документ то уже другой)
 

dimagolov

Новичок
form_obj.submit сабмитит форму в дочернем окне.
С чего бы это? Исходя из того, что save_and_exit объявленна в основном окне, то областью видимости, в которой будет происходить поиск document будет именно главное окно:
newWin.html:
PHP:
<html>
<head>
<title>Main Window</title>
<script>
function show_url () {
   alert('show_url: ' + document.location.href);
}
function wopen(url,name){
var w=window.open(url,name,"width=400,height=300");
}</script>
</head>
<body>
<span onClick="wopen('childWnd.html','Child Window')">Click here to OpenChild</span>
</body>
</html>
childWnd.html
PHP:
<html>
<head>
<title>Depended Window</title>
<script>
function informer () {
window.opener.show_url();
alert('informer: ' + document.location.href);
}
</script>
</head>
<body onload="informer()">
Content
</body>
</html>
 
Сверху