Закрытие всплывающего окна кнопкой X и событие окна загрузки - PullRequest
0 голосов
/ 17 июня 2011

Существует множество вопросов по этой теме, но я не видел, чтобы моя ситуация была рассмотрена, поэтому я опишу свой сценарий.

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

Так что я могу сделать window.onunload или я могу сделать тело onunload и в любом случае даст мне желаемые результаты.Однако есть третий сценарий, который усложняет ситуацию.Во всплывающем окне может быть отправка формы, которая изменяет содержимое этого всплывающего окна.Если это так, то будет вызываться либо window.onunload, либо body unload, в зависимости от того, что я настроил на своей странице.Это не то, что я хочу.Я хочу, чтобы постобработка происходила после того, как всплывающее окно визуально исчезало из поля зрения (кнопка «x» или «Закрыть»), но не после пост-обработки, когда была отправлена ​​форма, оставляя всплывающее окно визуально на этом экране.

Кто-нибудь может говорить с этим сценарием?

РЕДАКТИРОВАТЬ : Моя попытка решения, которое не вызывает window.onunload

    function searchFieldTitles()
{
    var searchOptionValue;
    var radioObj = document.getElementsByName("searchOption");
    var radioLength = radioObj.length;
    for(var i = 0; i < radioLength; i++) {
        if(radioObj[i].checked) {
            searchOptionValue = radioObj[i].value;
            break;
        }
    }

    $.get("/myroot/SearchFieldTitles.action", 
            {filterString: document.getElementsByName("filterString")[0].value, 
             searchOption: searchOptionValue, 
             filterBy: document.getElementsByName("filterBy")[0].value},
                  function(data) {                
                  });

      location.href="/myroot/jsp/field_titles/lookupFieldTitles.jsp";
}

Ответы [ 2 ]

0 голосов
/ 10 февраля 2013

Это немного безумно, но вы можете добавить обработчик click к каждой ссылке (кроме кнопки закрытия) и обработчик submit к каждой отправке формы в этом всплывающем окне, которое сначала отключает обработчик onunload и затем продолжает действие по умолчанию. Таким образом, пользователь может отправлять формы и загружать новые страницы внутри всплывающего окна без запуска очистки.

Однако это не поможет, если пользователь перезагрузит страницу, т. Е. Нажатием клавиши F5. Вы можете добавить обработчик keydown к элементу html, чтобы отключить обработчик onunload, если нажата F5 или Ctrl-r, и если во всплывающем окне нет виджета для перезагрузки из браузера, это, похоже, перехватывает большинство страниц. перезагрузить действия (однако проверено только в Firefox). Если другие браузеры поддерживают другие комбинации клавиш, их также необходимо добавить. Однако я не очень хорошо рекомендую это, так как захват всех событий клавиш на полной странице заставляет меня чувствовать себя неловко из-за того, что может пойти не так, а также необходимо поддерживать список комбинаций клавиш в зависимости от браузера, что звучит как адский менталитет , Лучше добавить на страницу кнопку HTML с надписью «Нажмите здесь, чтобы обновить» и надеяться, что ваши пользователи так дружелюбно используют эту кнопку вместо F5.

0 голосов
/ 17 июня 2011

Вы можете использовать AJAX для отправки формы. Вы даже можете получить ответ и изменить содержимое окна при любой его загрузке.

...