2012-02-24 65 views
0

我有使用javascript提交表单的JSP。其提交弹出窗口后的弹出窗口必须关闭。我使用以下代码:Firefox在提交后没有执行语句

document.forms["formname"].submit(); 
window.close(); 

问题是 - 表单被成功提交,但窗口没有关闭。 它在IE中工作正常。

+0

表单被提交并将浏览器重定向到结果页面。我认为代码没有再到达'window.close()'。 – Joseph 2012-02-24 06:52:56

+1

Congrates ..用于IE Support pulkit :)。我们很少在IE中找到支持,而不是在Mozilla Firefox中。 – 2012-02-24 07:01:51

回答

1

我怀疑它是如何在IE中工作的。 在您提交表单并将控件返回给浏览器之前/之后,Javascript没有任何控制权。在提交表单后,您应该使用另一种机制来关闭窗口。

+0

我想在这里添加: - 以前我写道: - document.formname.submit(); window.close(); 在这种情况下,Firefox正在关闭窗口,但没有提交表单。这段代码是在onclick事件中调用的javascript函数中的。 – Pulkit 2012-02-24 07:48:14

+0

现在你的问题已经解决了吗? – Ved 2012-02-24 08:52:05

+0

还没有!不管是哪种方式,都需要执行一个操作。 要么提交表单,要么关闭窗口。但两者应该一起发生。 – Pulkit 2012-02-24 10:50:34

0

而不是关闭窗口关闭窗口的上下文中运行的脚本,请尝试从打开窗口的上下文关闭它。例如:

var popup; 

function pop() { 
    popup = window.open('foo', 'mypopup', 'menubar=no,location=no,resizable=no,scrollbars=no,status=no'); 
    console.log(popup); 
} 

function unpop() { 
    popup.close(); // close the popup 
} 

这适用于我在Firefox。您可以现场测试它here

0

正如您发现的那样,一旦您提交了表单,就会将控制权移交给浏览器,并且不保证该页面中的任何其他javascript都会执行。它可能会立即开始加载结果页面。因此,您有以下几种选择:

  1. 您可以使结果页面自行关闭。所以,当提交后加载结果页面时,它包含它自己的window.close()
  2. 您可以使用ajax而不是表单提交将数据发送到您的服务器。然后,ajax代码发送数据后的行会执行。为了安全起见,您可能要等到ajax调用在关闭窗口之前成功返回(取决于您正在做什么以及知道它是否成功至关重要)。
  3. 您可以从打开窗体的父窗口控制事物并从那里关闭事物。