Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果用户中断重定向到新页面,Disabled submit按钮将保持禁用状态_Javascript_Html_Double Submit Prevention - Fatal编程技术网

Javascript 如果用户中断重定向到新页面,Disabled submit按钮将保持禁用状态

Javascript 如果用户中断重定向到新页面,Disabled submit按钮将保持禁用状态,javascript,html,double-submit-prevention,Javascript,Html,Double Submit Prevention,我想在使用javascript按下submit按钮后禁用它 myForm.onsubmit=函数(){ ... mySubmitButton.disabled=true; ... } 但当用户在当前页面仍处于活动状态时停止打开新页面时,按钮仍处于禁用状态 如果来自服务器的内容是文件,则会出现相同的结果(在这种情况下,不会重定向到新页面) 有没有办法确定浏览器是否不再“希望”加载新的URL并重新启用mySubmitButton?我认为可以使用setTimeout调用一个函数来重新启用按钮。超时必须

我想在使用javascript按下submit按钮后禁用它

myForm.onsubmit=函数(){ ... mySubmitButton.disabled=true; ... }

但当用户在当前页面仍处于活动状态时停止打开新页面时,按钮仍处于禁用状态

如果来自服务器的内容是文件,则会出现相同的结果(在这种情况下,不会重定向到新页面)


有没有办法确定浏览器是否不再“希望”加载新的URL并重新启用mySubmitButton?

我认为可以使用setTimeout调用一个函数来重新启用按钮。超时必须是一个合理的值,如5000(5s)。我不记得setTimeout/Interval调用是否在页面重定向后执行,因此,请先测试它。

如果您确实需要在客户端执行所有操作,则有几种方法可以做到这一点:

  • 如果用户决定再次编辑,请尝试重新启用按钮,例如单击任何表单字段

  • @Adilson说,setTimeout也是一个很好的解决方案,你不需要等待超过几秒钟就知道出了什么问题

  • 您还可以使用jqueryajax调用提交表单,如果提交失败,jqueryajax调用可以返回重新启用按钮的命令


  • 我相信还有更多的解决办法。我希望这三个问题能给你一个解决问题的方法。

    这似乎有点矛盾。如果要禁用“提交”按钮以防止重新提交,则这是所需的行为。如果用户在发送任何内容之前停止页面,但处理已开始,则再次提交表单将再次启动该处理。类似地,如果文件是这样处理的结果,再次获取该文件将需要再次提交表单。我认为禁用提交按钮可以解决重新提交问题,但始终禁用按钮看起来有点奇怪。如果我们想显示“请稍候”消息,则会一直出现此消息,让用户感到困惑。确定用户在按下提交按钮后仍停留在当前页面上的情况并不坏。这是不可能的。如果您需要避免重复提交,那么您应该在服务器端执行此操作。我已经为IE找到了解决此问题的方法。它是定期检查document.readyState!='complete”(应在onbeforeunload之后启动)。对于其他浏览器,似乎没有任何可能的解决方案。我试着用window.onabort,但它在Chrome中不着火。如果没有任何解决方案,这意味着在页面重定向期间阻止表单或显示任何“请稍候”消息是不正确的,因为在这种情况下,我们会得到一个丑陋的界面。您可以尝试发出AJAX请求,检查服务器是否真的收到了数据。