2011-01-28 3 views
0

ДрузьяЗакрытия дочерних окон

В нашем приложении мы имеем родительское окно A, а затем есть окно B, который нерестится из окна А, а затем окно C нерестится из окна B, а затем несколько других окон нерестится из окна C Когда я выхожу из окна A, закрывается только окно B, оно НЕ закрывает окно C и его дочерние элементы.

Используемый в настоящее время сценарий представлен ниже.

function Close(frm) { 
    var win; 
    if(window.opener) 
    { 
    win = window 
    }else if(window.parent.WinObjectArray) 
    { 
    win = window 
    } 
    else 
    { 
    win = window.parent; 
    } 
    if(!win.parent.WinObjectArray) 
    win = win.parent; 

    if(frm=='logout') 

    { 
    if(window.WinObjectArray !=null && window.WinObjectArray!=undefined) 
    { 
     for(i=win.parent.WinObjectArray.length-1;i>=0;i--) 

      { 
       if(!win.parent.WinObjectArray[i].closed) 
       win.parent.WinObjectArray[i].close(); 
      } 
      return ; 
    } 
    } 
    var closeWinArray = new Array(); 
    closeWinArray[0] = window; 
    if(window.WinObjectArray !=null && window.WinObjectArray!=undefined) 
    { 
     for(i=0;i<win.parent.WinObjectArray.length;i++) 
     { 
      var openerFnd = false; 
      for(j=0;j<closeWinArray.length;j++) 
       { 
       if(!win.parent.WinObjectArray[i].closed && win.parent.WinObjectArray[i].opener == closeWinArray[j]) 
       { 
       closeWinArray[closeWinArray.length] = win.parent.WinObjectArray[i]; 
       openerFnd = true; 
       } 
       else if(win.parent.WinObjectArray[i].closed) 
        { 
        openerFnd = true; 
        } 
       } 
    if(openerFnd){ 
    win.parent.WinObjectArray.splice(i,1); 
    i=i-1; 
    } 
    } 
    } 
    if(window.WinObjectArray !=null && window.WinObjectArray!=undefined) 
    { 
    for(i=0;i<win.parent.WinObjectArray.length;i++) 
    { 
    if(win.parent.WinObjectArray[i] == window) 
    { 
    win.parent.WinObjectArray.splice(i,1); 
    break; 
    } 
    } 
    closeWinArray.splice(0,1); 
    for(i=closeWinArray.length-1;i>=0;i--) 
    { 
    if(!closeWinArray[i].closed) 
    closeWinArray[i].close(); 
    } 
    } 
     for (i=0;i<WindowArray.length;i++){ 
     if (! WindowArray[i].closed) { 
     WindowArray[i].close(); 
     } 
    } 
} 
+0

Пожалуйста, запустите свой код через jsbeautifier.org - ваш отступ ужасный. – ThiefMaster

ответ

2

Просто у вас окно. Станьте лжецом для всех твоих оконных поясов. Его легко вызвать родителям, чтобы написать новое окно для дочерних процессов/окон. Поэтому, если вы направляете все свои функции окна в родительский и обратно, у вас больше не будет этой проблемы. Родительский [A] будет иметь разрешение и полный контроль над всеми дочерними окнами в этой настройке.

+0

+1 как это наиболее расширяемое решение, и он не требует, чтобы вы добавляли события onclose ко всем дочерним окнам - они даже не должны знать, что это детские окна, что здорово. – Fenton

+0

Plz проверить код, который я поставил – ronan

+0

Единственный способ, которым я могу отлаживать ваш код, - это позволить мне просмотреть документ в его собственном форматировании в Интернете. Полный интерфейс, который легко, если вы просто разместите ссылку на него. Я проведу его и увижу, что смогу помочь найти решение. – DoctorLouie

0

Я думаю, что окно A не имеет разрешения на Clode окно C и ребенок Windows, С.

Попробуйте следующее: Создать Javascript для события OnClose(). Прикрепите это к окну B. В этом методе закройте дочерние элементы B. Дети B shoud имеют один и тот же приемник onUnload() или onClose() и закрывают созданные ими окна.

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