Запрос на отправку JavaScript как отправка формы показывает вам, как отправить форму, которую вы создаете с помощью POST в JavaScript. Ниже мой измененный код.
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "test.jsp");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("name", "id");
hiddenField.setAttribute("value", "bob");
form.appendChild(hiddenField);
document.body.appendChild(form); // Not entirely sure if this is necessary
form.submit();
Я бы хотел открыть результаты в новом окне. В настоящее время я использую что-то вроде этого, чтобы открыть страницу в новом окне:
onclick = window.open(test.html, '', 'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Добавлять
<form target = "_blank" ...></form>
или же
form.setAttribute("target", "_blank");
к определению вашей формы.
Не забудьте добавить идентификатор атрибута в элемент формы, иначе это не будет работать в браузере Safari, даже если блокировщик всплывающих окон отключен. <form id = "popupForm" target = "_ blank" ...> </form>
Коротко и мило. Благодарить!!
Если вы хотите создать и отправить свою форму из Javascript, как в вашем вопросе, и вы хотите создать всплывающее окно с настраиваемыми функциями, я предлагаю это решение (я помещаю комментарии над строками, которые я добавил):
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "test.jsp");
// setting form target to a window named 'formresult'
form.setAttribute("target", "formresult");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("name", "id");
hiddenField.setAttribute("value", "bob");
form.appendChild(hiddenField);
document.body.appendChild(form);
// creating the 'formresult' window with custom features prior to submitting the form
window.open('test.html', 'formresult', 'scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');
form.submit();
+1 Лучше, чем принятый ответ, поскольку он фактически помещает результат во всплывающее окно с параметрами, которые хотел OP.
У меня не работает в IE - он создает новое окно с указанными атрибутами, а затем загружает результаты в другое новое окно, оставляя предыдущее окно пустым.
Я добавил новую строку, чтобы она работала в IE - это неприятно, но работает. В Firefox (который не поддерживает readyState) никогда не будет установлен параметр «загрузка».
@mjaggard: Что ты добавил? Возможно, стоит предложить отредактировать этот ответ.
Я предложил отредактировать, но до сих пор не вижу его. while (newWind.document.readyState == "загрузка") {}
1. Это работает во всех браузерах? 2. w3schools.com/tags/att_form_target.asp утверждает, что целевой атрибут элемента form устарел.
@SaurabhNanda Насколько я могу судить, атрибут target в элементе form имеет значение не устарело в HTML 4.01 переходный и, по-видимому, должен оставаться в HTML 5.
Предупреждение: мне нужно было прикрепить свою форму к телу документа, чтобы это сработало (в FF 17). Создать фрагмент и попытаться восстановить его не удалось.
Не забудьте добавить идентификатор атрибута в элемент формы, иначе это не будет работать в браузере Safari, даже если блокировщик всплывающих окон отключен. <form id = "popupForm" target = "_ blank" ...> </form>
@MarkoDumic Немного поздно спрашивать, но ... у меня была точно такая же проблема, и я попробовал ваш код, указанный выше. я получаю два всплывающих окна вместо одного. один для отправки формы (с фактическим URL-адресом), а другой для window.open с test.html (tht дает 404). знаете ли вы, почему это произошло?
Также хотел добавить, что у нас приложение на основе Citrix, поэтому только IE. не уверен, имеет ли это значение
Я знаю этот основной метод:
1)
<input type=”image” src=”submit.png”> (in any place)
2)
<form name=”print”>
<input type=”hidden” name=”a” value=”<?= $a ?>”>
<input type=”hidden” name=”b” value=”<?= $b ?>”>
<input type=”hidden” name=”c” value=”<?= $c ?>”>
</form>
3)
<script>
$(‘#submit’).click(function(){
open(”,”results”);
with(document.print)
{
method = “POST”;
action = “results.php”;
target = “results”;
submit();
}
});
</script>
Работает!
вот с jquery! он просит чистый JS
var urlAction = 'whatever.php';
var data = {param1:'value1'};
var $form = $('<form target = "_blank" method = "POST" action = "' + urlAction + '">');
$.each(data, function(k,v){
$form.append('<input type = "hidden" name = "' + k + '" value = "' + v + '">');
});
$form.submit();
Я что-то упустил или вам все еще нужен тег закрытия формы .append?
Я думаю, что это неполно после добавления формы, вы должны удалить ее для лучшей практики.
@theJollySin: вызывая jQuery для тега, он превратится в настоящий элемент DOM и будет закрыт при вставке в DOM.
Я думаю, что отсутствует appendTo ('body'), и последняя строка должна быть написана как: $form.appendTo('body').submit();
Самое простое рабочее решение для окна потока (проверено в Chrome):
<form action='...' method=post target = "result" onsubmit = "window.open('','result','width=800,height=400');">
<input name = "..">
....
</form>
Обратите внимание, что необходим
document.body.appendChild(form)является, см. stackoverflow.com/q/42053775/58241