繁体   English   中英

IE9 Double Form提交问题

[英]IE9 Double Form Submit Issue

我只是想知道是否有人对我所处的情况有一些信息或反馈。目前我正面临“双表提交”问题,我点击“提交”按钮一次,然后提交表格两次。 这只发生在IE9中,但我只针对Safari,Chrome(最新),FF(Ver 5/6),IE8和IE9进行了测试。

这是代码:

<!DOCTYPE html>
<html lang="en-us" dir="ltr">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title>IE9 test</title>
</head>
<body>
<h1>Testing</h1>
<form method="POST" id="submit_form">
<input type="text" name="x" value="xxxx" />
<input type="text" name="y" value="yyyy" />
<button type="submit" class="btn_sign_in" id="btn_logon" onclick="this.disabled=true;document.forms[0].submit();">Submit</button>
</form>
</body>
</html>

有问题的部分是:

onclick="this.disabled=true;document.forms[0].submit();"

代码已经在我的网站上存在了很长时间,这是我第一次遇到双提交问题,因为IE9今年才发布,可能这些天越来越多人使用IE9,因此我收到用户对这个问题的抱怨。

最难的部分是双重提交问题并不总是可重现的。 有时会提交双倍,有时会提交一次。

我目前的工作是改变:

<meta http-equiv="X-UA-Compatible" content="IE=edge" >

并改为:

<meta http-equiv="X-UA-Compatible" content="IE=8" >

这迫使IE9使用IE8兼容性,它将正确执行Javascript以进行提交。

我已经打电话给微软支持,他们声称这是一个“Javascript兼容性问题”,所以我们需要微调我们的Javascript以使我们的网站在IE9下正常工作..(Duh!)

无论如何,是我的代码:

onclick="this.disabled=true;document.forms[0].submit();"

开始已经错了? 因为即使其他浏览器没有抱怨,但可能这是不正确的开始?

我希望如果有人也面临类似问题,可以获得更多信息或反馈。 目前,如果我不将X-UA-Compatible更改为IE = 8,我可以将我的代码更改为:

onclick="this.disabled=true;"

这也将解决双重提交问题,但是还有一个我们应该注意的IE9兼容性问题列表吗?

谢谢!

这段代码错了:

onclick="this.disabled=true;document.forms[0].submit();"

onclick Javascript不保证正常提交也不会执行。 为此,它需要返回false,如下所示:

onclick="this.disabled=true;document.forms[0].submit(); return false;"

这种行为的改变是IE9的错误吗? 这取决于,这可能取决于时间问题导致的法律行为。 如果DOM / Javacript标准保证document.submit()是文档中所有执行的结束,那么这只是一个错误。 我怀疑是这种情况。

抽象出复杂性,问题似乎是IE9在javascript中触发提交事件时, 只需单击一次按钮即可提交两次表单

一般来说,我发现这样做修复了IE9双表单提交问题:

(IE9双提交HTML失败):

<input type="submit" />

(IE9 html双提交修复):

<input type="submit" onclick="return false; " />

所以基本上,我正在使用事件监听器(单击)处理javascript(未显示)中的表单提交,但是在旧的学校事件处理程序(onclick)上返回false,IE9似乎自动调用它,即使您已经通过事件监听器。

我猜你可以在纯javascript中做同样的事情:

inputElement.onclick = function(){ return false; };

但我没有测试它。

当你使用

onclick="document.forms[0].submit();"

在提交按钮上,写入input type="button"而不是type="submit"

因为你已经有了执行.submit()的代码,为什么不将按钮类型更改为简单按钮而不是提交?

我不确定这是否是问题,但是,翻译成简单的英语,您的代码似乎在说“单击提交按钮,将disabled属性设置为true,然后提交表单。”

但是,由于单击提交按钮已经提交了表单,因此您的浏览器可能会收到两个提交请求 - 一次是您单击按钮,第二次是您的javascript告诉它提交。

如果你没有做ajax,只是常规提交,你应该能够return true而不是调用submit - 本质上,告诉浏览器继续执行默认操作(即提交)。

或者真的,完全杀死整个submit()部分,因为它是多余的。

部分问题是我相信你提交了两次。 您需要在开始第二个事件之前停止第一个事件。 有关使用内联javascript停止事件的更多信息,请参阅此帖子: 如何使用内联onclick属性停止事件传播?

我们在IE9中遇到了同样的问题,我们通过将event的cancelBubble和returnValue标志分别设置为true和false来解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM