在Firefox浏览器中使用“返回”按钮时,表单提交按钮仍然保持禁用状态。

6

我正在使用一些jquery代码来禁用表单提交按钮,以防止意外重复点击。这在除Firefox之外的所有浏览器中都可以正常工作。但是,在Firefox中,如果用户使用浏览器的后退按钮返回到页面,表单提交按钮仍然处于禁用状态。是否有解决此问题的方法?


1
添加一个空的卸载处理程序。原因在于这个相关问题中已经讨论过:跨浏览器onload事件和后退按钮 - user240515
3个回答

8

可能你需要在表单中添加autocomplete="off"参数。

<form autocomplete="off">
  <input type="submit" />
</form>

我觉得很奇怪,Firefox认为按钮的状态是“自动完成”的一部分...但无论如何,感谢您提供的简洁解决方案。顺便说一句,这不仅发生在使用浏览器返回时,还会在通过Ajax交换表单的新版本时发生。 - lawrence

4
$(document).ready(function() {
    $('input[type=submit]', this).attr('disabled', false);

    $('#myform').submit(function(){
        $('input[type=submit]', this).attr('disabled', true);
    });    

});

使用jQuery,这将使按钮在浏览器返回时不被禁用。在FF 3.5上测试过。

实际上这是不正确的 - $(document).ready() 不会在按下后退按钮时触发;也不会运行任何内联脚本。最好使用 window.onpageshow 事件,但如果需要支持 IE10 或更低版本,则无法实现。更多信息请参见:https://dev59.com/KXE85IYBdhLWcg3wvGER#2639165 - Chris
我的评论上面还有一个简短的补充:这仅适用于现代浏览器,它们将缓存整个页面(包括脚本所做的任何编辑)。因此,Erik在上面的答案在发布时可能是正确的 - 并且在IE10及以下版本中仍然有效 - 但如果您在2017年或之后找到了这个答案,请务必小心。 - Chris

0
如果浏览器禁用了缓存,那么页面将重新加载,就像没有任何按钮被点击一样。
如果您想要客户端的话,可以使用cookie。
现在,如果你有一个服务器端技术(PHP/Rails),那么你可以把值放在会话变量中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接