#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(). Вы должны иметь возможность вызывать это после отправки формы.
Ответ №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 . Но мои первоначальные замечания остаются в силе: событие выгрузки, вероятно, не будет выполняться достаточно долго (т. Е. браузер будет закрыт преждевременно), чтобы отправить форму.