【发布时间】:2011-07-04 11:47:26
【问题描述】:
我有一个 Web 表单,我想阻止其多次提交。在生产中,这是通过具有onclick="this.disabled=true" 属性的提交按钮来完成的。这样,如果提交了表单然后用户返回(大概是为了“编辑”数据,我们的用户似乎不时想要这样做),提交按钮仍然处于禁用状态。
这在 Firefox、Safari 和 Internet Explorer 中运行良好。然而,在 Chrome 中,禁用似乎在表单提交之前触发,从而防止它发生。为了解决这个问题,我将按钮的 onclick 操作更改为:
this.disabled=true; $('myform').submit()
这会导致表单被提交,但是当我使用 Chrome 的后退按钮返回表单页面时,该按钮不再被禁用。我在提交之前输入表单的值仍然存在,所以我的猜测是 Chrome 必须有选择地重新加载 DOM。
有什么方法可以在 Chrome 中使用 Javascript 来完成我想要的吗?当然,还有其他方法可以解决此问题,但禁用按钮具有非常吸引人的简单性。
我在 Linux 的 Chrome 12.0.742.100 和 MacOS X 的 12.0.742.112 中进行了测试。
【问题讨论】:
-
您可以先禁用该按钮,然后使用 JavaScript 代码在
onload启用它。 -
@Shadow 向导 - 结果是如果 javascript 被禁用、不可用或由于某种原因无法正常运行,按钮将不会被启用。
-
@Rob 可以通过使用
<noscript>标签来修复。 -
@ShadowWizard:请将此作为答案,以便我们讨论。但它不起作用——除非我遗漏了什么。您是否在 Chrome 中对此进行了测试并发现它有效?我正在使用 12.0.742.100,我应该将其包含在原始问题中(现在将对其进行编辑)。
-
之所以评论是因为它只是一个想法,没有机会测试它。没有必要发布我们已经知道不正确的答案,或者至少不能解决问题。这就是说,在我看来“后退按钮问题”是我们无法真正解决的问题,您可以只输入消息“请不要使用后退按钮”。