javascript: закрытие окна при нажатии кнопки

#javascript #web-applications #struts

#javascript #веб-приложения #распорки

Вопрос:

Мне нужно закрыть окно при нажатии кнопки, используя javascript.

Однако, прежде чем закрыть окно, я хочу отправить форму (я использую struts2. Это веб-приложение на Java).

Итак, как мне отправить данные для сохранения и закрыть окно одновременно. Это всплывающее окно. Ниже приведен код jquery, который я использую для отправки формы.

    function fnSubmit() {                
         $('#adminpopup').attr('action','submitPopupAction').submit();  
}   
  

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

Я думаю, этого нельзя достичь простым вызовом функций javascript одну за другой. Есть ли какой-либо способ добиться этого?

Ответ №1:

Отправьте форму на сервер.

Если это тот же домен, верните

 <script>
window.close()
</script>
  

с сервера

Ответ №2:

Вы могли бы использовать функцию self.close() JavaScript (или window.close() для других окон), но она покажет сообщение безопасности, если окно не было открыто с помощью window.open(). Вы должны иметь возможность вызывать это после отправки формы.

Использование window.close

Ответ №3:

Просто отправьте форму и (в случае успеха) отправьте страницу обратно, которая просто выдает window.close . Это сработает только в том случае, если окно было открыто с помощью window.open , поэтому в качестве запасного варианта вы должны предоставить удобочитаемое сообщение в окне, в котором говорится, что они могут безопасно закрыть всплывающее окно.

Ответ №4:

Просто добавьте это после submit строки:

 window.setTimeout(function() {
   window.close();
}, 1000);
  

Это даст одну секунду на отправку формы (достаточно времени, чтобы убедиться, что запрос был отправлен), затем закройте окно.

Комментарии:

1. Почему вы так уверены, что для отправки формы достаточно 1 секунды? Даже при быстром подключении сервер может быть довольно занят и отвечать не сразу.

2. @Marcel, насколько я мог видеть, ему не нужно видеть ответ. После отправки запроса этого достаточно, не нужно ждать ответа от сервера.

3. AFAIK браузеру придется связаться с сервером, прежде чем он сможет отправить данные формы. Данные формы могут быть даже такими большими, что их невозможно отправить всего за одну секунду. Короче говоря, эта одна секунда — всего лишь предположение, вы не можете на нее полагаться.

4. @Marcel ОК, достаточно справедливо. Оставляем это как альтернативный способ с его недостатком, объясненным в комментариях.

Ответ №5:

Попробуйте выполнить следующее:

Создайте кнопку и добавьте туда событие onClick. Закройте это окно. Дополнительно подключите событие *отменить*загрузку к тегу body. В этом случае отправьте форму.

Комментарии:

1. Это не будет работать в браузерах, более совместимых со стандартами, таких как Opera; прежде всего, очень вероятно, что событие выгрузки не будет выполняться достаточно долго, чтобы отправить форму.

2. Как это будет работать? Вы не можете отправить форму на ту же страницу в onunload

3. Насколько я знаю, событие onUnload не выходит за рамки HTML от W3C foundation. Или я больше не обновляюсь?

4. Вы правы, это в спецификации DOM level 2 . Но мои первоначальные замечания остаются в силе: событие выгрузки, вероятно, не будет выполняться достаточно долго (т. Е. браузер будет закрыт преждевременно), чтобы отправить форму.