提交表单并关闭窗口

时间:2016-05-18 10:35:40

标签: javascript html forms window

我无法理解为什么这不起作用。

我在新标签页面中打开了一个表单,我想在提交时将其关闭:

<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()时,表单已提交,但是当它出现在我的代码中时,它会显示警告但不会提交。

有什么不对吗?

5 个答案:

答案 0 :(得分:0)

在事件处理函数运行完毕之前,不会提交表单。

alert阻止所有内容的执行,直到对话框被解除。

close关闭了一个窗口,因此无法将表单提交加载到其中,这将取消请求。

如果要关闭窗口,请不要指望它能够同时发送HTTP请求。

答案 1 :(得分:0)

您无需在新窗口(或标签页)中打开表单。 您可以在ajax中提交数据,也可以使用内部隐藏的iframe作为表单元素的target属性。这样,表单将在隐藏的内部元素中打开。 e.g:

<form id="eFrm" target="ifrm1">
</form>
<iframe id="ifrm1" name="ifrm1" style="display:none"></iframe>

答案 2 :(得分:-1)

你可能已经找到了一个解决方案,但无论如何我都会发布这个解决方案。

我正在使用Java servlet,但我认为每个表单提交都是一样的=&gt;能够选择在处理发布数据后必须显示哪个页面。

提交表单后,servlet中的doPost方法允许我说明在处理数据后我希望浏览器显示哪个URL。

所以,你可以做这些事情:

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

然后还创建一个名为ClosePopup.html的文件,只有一个close()指令

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

这样,它就不会是您单击的按钮来触发弹出窗口的关闭,但是在提交表单后您将加载一个自毁页面。最终结果是相同的。

答案 3 :(得分:-2)

您无法通过window.close()方法关闭任何窗口。由于window.close()失败,因此永远不会提交表单。

  

Window.close()方法关闭当前窗口或窗口   它被称为。

     

仅允许为打开的窗口调用此方法   通过使用window.open()方法的脚本。如果窗口不是   由脚本打开,JavaScript中出现以下错误   控制台:脚本可能无法关闭脚本未打开的窗口。

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

答案 4 :(得分:-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:)