2015-06-02 5 views
0

У меня проблема. Есть две функции, которые я назначил двум кнопкам, каждый из которых будет всплывать, если щелкнуть. Во все времена будет только один всплывающий за раз (или так я желаю). Это то, что я сделал до сих пор:Нулевое значение для всплывающего окна

var ADD_TESTER_POPUP = null; 
var DELETE_TESTER_POPUP = null; 

// user clicks on Add Tester 
function openAddNewTesterWindow(width, height) 
{ 
    //if no windows are open 
    if((ADD_TESTER_POPUP===null || ADD_TESTER_POPUP.closed) && 
     (DELETE_TESTER_POPUP===null || DELETE_TESTER_POPUP.closed)) 
    { 
     var left = (screen.width/2)-(width/2); 
     var top = (screen.height/3)-(height/3); 
     ADD_TESTER_POPUP = window.open("addNewTesterWindow.html", "", "scrollbars=1, 
      resizable=1, width="+width+", height="+height+", top="+top+", left="+left); 
    } 
    else 
    { 
     //error occurs at this if statement line only 
     //if add tester is already open 
     if((!ADD_TESTER_POPUP===null || !ADD_TESTER_POPUP.closed) && 
      (DELETE_TESTER_POPUP===null || DELETE_TESTER_POPUP.closed)) 
     { 
      ADD_TESTER_POPUP.focus(); 
     } 
     //if delete tester is open 
     else if((ADD_TESTER_POPUP===null || ADD_TESTER_POPUP.closed) && 
       (!DELETE_TESTER_POPUP===null || !DELETE_TESTER_POPUP.closed)) 
     { 
      alert("Please close Delete Tester Window before adding tester."); 
      DELETE_TESTER_POPUP.focus(); 
     } 
    } 
} // openAddnNewTesterWindow(width, height) 

// user clicks on Delete Tester 
function openDeleteTesterWindow(width, height) 
{ 
    //if no windows are open 
    if ((ADD_TESTER_POPUP===null || ADD_TESTER_POPUP.closed) && 
     (DELETE_TESTER_POPUP===null || DELETE_TESTER_POPUP.closed)) 
    { 
     var left = (screen.width/2)-(width/2); 
     var top = (screen.height/3)-(height/3); 
     DELETE_TESTER_POPUP = window.open("deleteTesterWindow.html", "", "scrollbars=1, 
      resizable=1, width="+width+", height="+height+", top="+top+", left="+left); 
    } 
    else 
    { 
     //if delete tester is already open 
     if((ADD_TESTER_POPUP===null || ADD_TESTER_POPUP.closed) && 
      (!DELETE_TESTER_POPUP===null || !DELETE_TESTER_POPUP.closed)) 
     { 
      DELETE_TESTER_POPUP.focus(); 
     } 
     //if add tester is already open 
     else if((!ADD_TESTER_POPUP===null || !ADD_TESTER_POPUP.closed) && 
       (DELETE_TESTER_POPUP===null || DELETE_TESTER_POPUP.closed)) 
     { 
      alert("Please close Add Tester Window before deleting tester."); 
      ADD_TESTER_POPUP.focus(); 
     } 
    } 
} // openDeleteTesterWindow(width, height) 

Когда окно Добавить Новый тестер открыт первый, если пользователь пытается нажать на кнопку Delete Tester это предупредит пользователя. Когда окно «Удалить тестер» открывается, если пользователь пытается нажать кнопку «Добавить новый тестер», он предупредит пользователя.

Однако, если я открыл Delete Tester Window первый (обновляется/чистую страницу), и я нажимаю на кнопку Добавить новый тестер, ошибка будет происходить с указанием Uncaught TypeError: Cannot read property 'closed' of null (Это использует инструмент отладчик для Chrome). Я указал в коде, где происходит ошибка, в первой функции. Любая помощь по этому поводу?

ответ

0

Найден ответ. Это была логическая ошибка, пришлось проверить, открывается ли всплывающее окно первым или нет. Простое переключение между if и else if в заявлении else решает его.

var ADD_TESTER_POPUP = null; 
var DELETE_TESTER_POPUP = null; 

// user clicks on Add Tester 
function openAddNewTesterWindow(width, height) 
{ 
    //if no windows are open 
    if((ADD_TESTER_POPUP===null || ADD_TESTER_POPUP.closed) && 
     (DELETE_TESTER_POPUP===null || DELETE_TESTER_POPUP.closed)) 
    { 
     var left = (screen.width/2)-(width/2); 
     var top = (screen.height/3)-(height/3); 
     ADD_TESTER_POPUP = window.open("addNewTesterWindow.html", "", "scrollbars=1, 
      resizable=1, width="+width+", height="+height+", top="+top+", left="+left); 
    } 
    else 
    { 
     //if delete tester is open 
     if((ADD_TESTER_POPUP===null || ADD_TESTER_POPUP.closed) && 
       (!DELETE_TESTER_POPUP===null || !DELETE_TESTER_POPUP.closed)) 
     { 
      alert("Please close Delete Tester Window before adding tester."); 
      DELETE_TESTER_POPUP.focus(); 
     } 
     //if add tester is already open 
     else if((!ADD_TESTER_POPUP===null || !ADD_TESTER_POPUP.closed) && 
      (DELETE_TESTER_POPUP===null || DELETE_TESTER_POPUP.closed)) 
     { 
      ADD_TESTER_POPUP.focus(); 
     } 
    } 
} // openAddnNewTesterWindow(width, height) 

// user clicks on Delete Tester 
function openDeleteTesterWindow(width, height) 
{ 
    //if no windows are open 
    if ((ADD_TESTER_POPUP===null || ADD_TESTER_POPUP.closed) && 
     (DELETE_TESTER_POPUP===null || DELETE_TESTER_POPUP.closed)) 
    { 
     var left = (screen.width/2)-(width/2); 
     var top = (screen.height/3)-(height/3); 
     DELETE_TESTER_POPUP = window.open("deleteTesterWindow.html", "", "scrollbars=1, 
      resizable=1, width="+width+", height="+height+", top="+top+", left="+left); 
    } 
    else 
    { 
     //if add tester is already open 
     if((!ADD_TESTER_POPUP===null || !ADD_TESTER_POPUP.closed) && 
       (DELETE_TESTER_POPUP===null || DELETE_TESTER_POPUP.closed)) 
     { 
      alert("Please close Add Tester Window before deleting tester."); 
      ADD_TESTER_POPUP.focus(); 
     } 
     //if delete tester is already open 
     else if((ADD_TESTER_POPUP===null || ADD_TESTER_POPUP.closed) && 
      (!DELETE_TESTER_POPUP===null || !DELETE_TESTER_POPUP.closed)) 
     { 
      DELETE_TESTER_POPUP.focus(); 
     } 
    } 
} // openDeleteTesterWindow(width, height) 
Смежные вопросы