Всплывающее окно не будет закрыто - PullRequest
0 голосов
/ 22 июля 2010

Я хочу закрыть всплывающее окно со страницы ошибки. Процесс такой:

  1. Отправить форму
  2. При отправке формы просмотрите всплывающее окно, открытое
  3. Если после отправки формы выдается ошибка, просмотрите перенаправление страницы (не всплывающее окно) на страницу ошибки

В это время всплывающее окно должно закрыться.

Учитывая время открытия всплывающего окна и отправки формы, не существует простого способа подождать и посмотреть, будет ли выдана ошибка, а затем решить, открывать ли всплывающее окно или нет. Конкретная ошибка, против которой я программирую, появляется после открытия всплывающего окна, поэтому я считаю, что всплывающее окно должно быть закрыто со страницы ошибок. Шаги установлены на месте, поэтому я ищу решение для текущей архитектуры.

На странице ошибки я попытался вызвать функцию из того же файла сценария, который включает функцию, отвечающую за открытие всплывающего окна. Соответствующий код:

var PopupWnd = null;
function ShowPopup(){
 PopupWnd = window.open('Popup.aspx','PopupWnd','');
}
function HidePopup(){
 if(PopupWnd != null){
  if(!PopupWnd.closed){
   PopupWnd.close();
  }
 }
}

Разве из функции HidePopup () не должен ли объект PopupWnd быть равным нулю, если функция ShowPopup () была выполнена ранее? Связано ли это с проблемой определения масштаба или сроками событий? Как сделать так, чтобы значение объекта PopupWnd сохранялось, чтобы оно не равнялось нулю, когда я хочу закрыть всплывающее окно в функции HidePopup ()?

Спасибо за помощь.


ДОПОЛНИТЕЛЬНЫЕ ЗАМЕЧАНИЯ:
После подтверждения, что в именах нет коллизий, мне интересно, имеет ли значение, что я вызываю функцию HidePopup из события Page_Load моего кода за страницей ошибок aspx. Код:

string script = "<script>HidePopup();</script>";
ClientScript.RegisterClientScriptBlock(GetType(), "UploadErrorScript", script);

Для проверки работоспособности я ввел предупреждения, чтобы удостовериться, что функция HidePopup вызывается из моего codebehind и объект PopupWnd по-прежнему установлен равным нулю в этой функции.

1 Ответ

1 голос
/ 22 июля 2010

У вас может быть коллизия в именах. У вас есть переменная PopupWnd и имя окна PopupWnd.

var PopupWnd = null; function
ShowPopup(){
     PopupWnd = window.open('Popup.aspx','PopupWindow','');
} 
function HidePopup(){
    if(PopupWnd != null){
        if(!PopupWnd.closed){
            PopupWnd.close();
        }
    }
 }

Это должно работать, так как WindowName больше не конфликтует с переменной. Я бы посоветовал проверить http://www.infimum.dk/HTML/JSwindows.html для более глубокого представления о манипулировании окнами с использованием javascript.

В таком случае я бы также предложил провести тестирование Line by Line и выполнить такие действия, как выдача оповещения, т.е. сделать оповещение после, если PopupWnd! = Null, чтобы увидеть, достигнет ли он даже этой части. Черт, сделай предупреждение прямо в начале функции HidePopup, чтобы увидеть, каково значение PopupWnd ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...