3

我有一个页面,其中包含我试图防止重复提交的表单,这相当简单(如果有人好奇,我使用了这个

$("form").submit(function()
{
    setTimeout(function()
    {
        $("input").attr("disabled", "disabled");
    }, 50);
});

...我从这个页面偷来的,它工作正常。正如预期的那样,输入被快速禁用,表单按预期提交,用户被重定向。

这是我的问题:我预计用户有时会使用“后退”按钮而不是页面内导航,因此如果他们单击“后退”按钮,我希望页面能够正常工作。但是,当我在成功发布后单击“后退”按钮时,我会返回到上一页,并且禁用所有输入(您可能已经知道会发生这种情况)。如果他们愿意,我希望他们能够在单击“返回”按钮后使用该页面。

我首先尝试使用 header/meta 标签来告诉浏览器不要缓存页面,但这不起作用(在 Firefox 3.6.8 中) - 然后我决定我不想这样做,因为它可能不会'不是跨浏览器兼容的,无论如何可能不是最佳实践(这里有一个这样的案例)。我不想像我见过的某些应用程序那样使用“破坏”后退按钮的任何东西(例如,当用户单击它时,它不会将它们带回页面,而是迫使它们留在那个页面上),这对我来说似乎是个坏主意。有谁知道当用户单击“后退”按钮时我可以防止在客户端重复提交表单而不会使页面无用的方法?(以防万一,我使用的是 ASP.NET MVC 1)。

4

2 回答 2

0

好吧,听起来好像没有其他人想到了更好的主意并发布了它。我注意到我们自己的 Stack Overflow 具有相同的行为(至少在“提问”页面上),禁用了提交按钮,当我单击“返回”时,该按钮仍然被禁用。也许我能做的最好的事情就是禁用按钮,从而迫使他们手动刷新页面,或者(希望)鼓励他们尽可能使用站点导航而不是返回按钮。

不过,如果其他人有更好的想法,我仍然对他们持开放态度。

于 2010-08-18T13:53:03.160 回答
0

为什么不为每个表单创建一个唯一的随机密钥,然后在提交时将密钥插入数据库,如果该密钥已经存在于数据库中,则表单已经提交,所以不要第二次处理数据......这样您就不会修改 DOM 并且可以确保数据完整性。

于 2013-02-11T04:07:42.427 回答