2016-05-18 2 views
1

Я не могу понять, почему это не работает.Отправить форму и закрыть окно

я форма открыта в новой вкладке, которую я хочу, чтобы закрыть при подаче:

<form name="form" id="form" method="post" enctype="multipart/form-data" > 
    //form inputs 
    <button accesskey="C" class="boton" onclick="form.submit(); alert('waiting...'); window.close()"> <u>A</u>djuntar</button> 

</form> 

, когда я удаляю window.close() форма отправлена, но когда это в моем коде, это показывает, предупреждение, но не отправление.

Есть ли что-то не так?

+0

Вы открываете окно с помощью JS? Я не думаю, что вы можете закрыть любое старое окно, оно должно быть создано вами (как мера безопасности). Кроме того, я не уверен, что вы можете закрыть вкладки с помощью JS * at-all *, хотя '. close() 'did used to work – DBS

+0

Button может закрывать только открытые им окна. См. 'Https: // developer.mozilla.org/de/docs/Web/API/Window/close' –

+0

попробуйте с onclick =" form.submit(); alert ('waiting ...'); window.close ();» –

ответ

-2

Вы не можете закрыть любое окно по методу window.close(). Форма никогда не отправляется, потому что window.close() не работает.

Метод Window.close() закрывает текущее окно или окно на , которое было вызвано.

Этот метод разрешен только для окон, которые были открыты с помощью метода window.open(). Если окно не было , открытое скриптом, в консоли JavaScript появляется следующая ошибка: Консоль: скрипты могут не закрывать окна, которые не были открыты скриптом.

https://developer.mozilla.org/en-US/docs/Web/API/Window/close

+2

Я думаю, вы неправильно поняли вопрос. Похоже, проблема, с которой сталкивается OP, заключается в том, что форма не отправляется, когда окно закрывается, а не закрывается окно. – Quentin

0

форма не будет представлен, пока функция обработчик события завершения выполнения.

alert блокирует все выполнение всего, пока диалог не будет отклонен.

close закрывает окно, поэтому в него некуда загружать подачу формы, что отменяет запрос.


Если вы собираетесь закрыть окно, не ожидайте, что он сможет отправлять HTTP-запрос одновременно.

-2

HTML:

<form name="form" id="form" method="post" enctype="multipart/form-data"> 
     //form inputs 
     <button accesskey="C" class="boton" onclick="form.submit();" > <u>A</u>djuntar</button> 

    </form> 

JS:

form.addEventListener("submit", myFunc); 

function myFunc() { 
    alert('waiting...'); 
    window.close() 
} 

Ее мы создаем событие, и закрыть окно после того, как она занесена

Возьмите JS в тег сценария, если вы будете проверять его :)

+2

Это просто переводит часть кода в другой обработчик событий. У этого есть все проблемы, которые исходный код имеет и по тем же причинам. – Quentin

+0

«Когда я удаляю window.close(), форма отправляется, но когда она в моем коде, она показывает предупреждение, но не отправляет». Теперь мы знаем, что это – sv88erik

+2

Событие отправки событий не означает, что форма на самом деле будет отправлена. Вы все равно можете отменить подачу. Обычным способом сделать это будет вызов 'event.preventDefault()', но вы также можете сделать это, сделав невозможным разрешение HTTP-запроса, который инициирует отправку формы. * Закрытие окна * сделало бы это. – Quentin

-1

Возможно, вы уже нашли решение, но я отправляю его в любом случае для тех, кто co mes через то же самое в будущем.

Я использую сервлеты Java, но я думаю, что это то же самое с каждой формой отправки => возможность выбирать, какая страница должна отображаться после обработки опубликованных данных.

После того, как я отправил форму, метод doPost в сервлете позволяет мне указать, какой URL-адрес я хочу отобразить в браузере после обработки данных.

Таким образом, вы можете сделать, вероятно, сделать что-то вдоль этих линий:

request.getRequestDispatcher ("/ClosePopup.html").forward (request, response); 

Затем также создать файл с именем ClosePopup.html, ни с чем иным, как близко() инструкции

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
    </head> 
    <body onLoad = "window.close();"> 
    </body> 
</html> 

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

+0

Для человека, который отказался от этого: что пошло не так? Это работает для меня, но если вы не получите тот же результат, то, возможно, я смогу придумать решение, которое можно применить к большему числу случаев, основываясь на том, что я опубликовал – Dan

0

Вам не нужно открывать форму в новом окне (или вкладке). вы можете отправить данные в ajax или использовать внутренний скрытый iframe как свойство target элемента формы. таким образом, форма откроется в скрытом внутреннем элементе. например:

<form id="eFrm" target="ifrm1"> 
</form> 
<iframe id="ifrm1" name="ifrm1" style="display:none"></iframe> 
Смежные вопросы