Свойство onsubmit не открывает новое окно

Быстрый вопрос здесь относительно форм. Я искал в Интернете и не могу понять, почему то, что я реализовал, не работает.

Идея проста. У меня есть форма внутри страницы JSP. Форма имеет свойство «onsubmit», определенное для открытия другого JSP с некоторыми параметрами. Внутри формы у меня есть несколько кнопок, одна из которых вызывает функцию JavaScript, которая, в свою очередь, отправляет форму (при некоторых условиях).

Вот код: JSP:

...
<form id='testForm' onsubmit="window.open('another.jsp')">
  <input type="button" onclick="callJsFunction()" />
  ..
</form>

JavaScript:

function callJsFunction() {
  if (launchNow == 1) {
    var form = document.getElementById("testForm");
    form.submit();
  }
}

Если я добавлю target="_blank" в определение формы, откроется новое окно, но НЕ JSP, который я хочу открыть. В конечном счете, я хочу, чтобы форма выполняла действие сервлета (используя атрибут действия), а затем открывала новый файл jsp. Есть идеи???

Спасибо!


person Bob .    schedule 27.12.2012    source источник
comment
Если вы добавите <form action="newForm.jsp" target="_blank"> newForm.jsp, он должен открыться в новом окне. Но я не понимаю, почему вы не используете <input type="submit" /> вместо button, а затем не добавляете callJsFunction в onSubmit.   -  person TryingToImprove    schedule 28.12.2012
comment
Пожалуйста, смотрите мой комментарий ниже предлагаемого ответа   -  person Bob .    schedule 28.12.2012


Ответы (3)


Решение того, что я искал, находится здесь: Javascript Post при отправке формы открыть новое окно

Вместо того, чтобы устанавливать target="_blank", я могу установить цель на окно, которое я определяю и открываю. В моем сервлете я перенаправляюсь на нужный jsp, и он появляется в новом всплывающем окне.

person Bob .    schedule 27.12.2012

Я могу ошибаться, но это то, что вы ищете?

См. рабочую демонстрацию по этой ссылке: http://fiddle.jshell.net/vf6AC/show/light/ (не работает в jsfiddle)

<form action="http://google.com" id="testForm">
    <input type="submit" />
</form>​

<script type="text/javascript">
var testForm = document.getElementById("testForm");

testForm.onsubmit = function(e){
    window.open("http://stackoverflow.com");

    return true;
};​
</script>

См. jsfiddle здесь: http://jsfiddle.net/vf6AC/

person TryingToImprove    schedule 27.12.2012
comment
Всем спасибо. Я нашел то, что искал здесь: stackoverflow.com/questions/178964/ - person Bob .; 28.12.2012

person    schedule
comment
Я не хочу связывать параметр действия, потому что мне также нужно вызвать сервлет для выполнения некоторой обработки. Думаю, лучше спросить, могу ли я перенаправить из сервлета в новое окно? - person Bob .; 28.12.2012
comment
Если action."..." используется для чего-то другого, то где логика, которая решает, какое действие происходит при отправке формы? Насколько я могу судить, вам нужно перехватить отправку формы с помощью обработчика отправки, сделать все необходимое, возможно, включая вызов ajax, а затем return false безоговорочно подавить естественную отправку формы. - person Beetroot-Beetroot; 28.12.2012