我有一个表单,服务器需要一段时间才能处理。我需要确保用户等待,并且不会通过再次单击按钮来尝试重新提交表单。我尝试使用以下jQuery代码:
<script type="text/javascript">
$(document).ready(function() {
$("form#my_form").submit(function() {
$('input').attr('disabled', 'disabled');
$('a').attr('disabled', 'disabled');
return true;
});
});
</script>
当我在Firefox中尝试这样做时,所有的东西都被禁用了,但是表单并没有提交任何它应该包含的POST数据。我不能使用jQuery来提交表单,因为我需要将该按钮与表单一起提交,因为有多个提交按钮,并且我要确定在帖子中包含哪个值所使用的按钮。我需要提交的表格,因为它通常是,我需要禁用一切后,这发生了。
谢谢!
发布于 2012-07-25 20:12:08
计时方法是错误的-你如何知道操作将在客户端的浏览器上花费多长时间?
怎么做?
$('form').submit(function(){
$(this).find(':submit').attr('disabled','disabled');
});
当表单提交时,它将禁用内部的所有提交按钮。
请记住,在Firefox中,当您禁用按钮时,当您返回历史时,此状态将被记住。例如,为了防止出现这种情况,你必须在页面加载时启用按钮。
发布于 2015-01-20 07:18:02
请查看jquery-safeform插件。
使用示例:
$('.safeform').safeform({
timeout: 5000, // disable next submission for 5 sec
submit: function() {
// You can put validation and ajax stuff here...
// When done no need to wait for timeout, re-enable the form ASAP
$(this).safeform('complete');
return false;
}
});
发布于 2011-10-30 15:45:47
有可能改进Nathan Long的approach。您可以将检测已提交表单的逻辑替换为以下逻辑:
var lastTime = $(this).data("lastSubmitTime");
if (lastTime && typeof lastTime === "object") {
var now = new Date();
if ((now - lastTime) > 2000) // 2000ms
return true;
else
return false;
}
$(this).data("lastSubmitTime", new Date());
return true; // or do an ajax call or smth else
https://stackoverflow.com/questions/2830542
复制相似问题