提交后仅禁用提交按钮

我有以下HTML和jquery:

    

Test disabling submit button for 1 minute...


$(document).ready(function () { $(".submitBtn").click(function () { $(".submitBtn").attr("disabled", true); return true; }); });

按下时,提交按钮会在按下时被禁用。 但是一旦按下它似乎没有执行提交。 如果我删除了jquery以禁用该按钮,则该按钮会正常执行提交。

如何在执行提交后才禁用该按钮? 上面的当前jquery似乎与提交操作冲突。

任何解决此问题的建议都会非常有帮助。

在submit事件中添加禁用部分。

 $(document).ready(function () { $("#yourFormId").submit(function () { $(".submitBtn").attr("disabled", true); return true; }); }); 

我遇到了同样的问题。 客户可以提交表单,然后多个电子邮件地址将收到一封邮件。 如果页面的响应时间过长,有时按钮被按下两次甚至更多次。

我尝试禁用onsubmit处理程序中的按钮,但表单根本没有提交。 上面的解决方案工作可能很好,但对我来说这有点太棘手了,所以我决定尝试别的东西。

在提交按钮的左侧,我放置了第二个按钮,该按钮未显示并在启动时被禁用:

   

在附加到表单的onsubmit处理程序中,隐藏了“真实”提交,并显示“假”提交,并显示消息正在发送的消息。

 function checkinput // submit handler { .. ... $("#btnverzenden").hide(); <= real submit button will be hidden $("#btnverzenden2").show(); <= fake submit button gets visible ... .. } 

这对我们有用。 我希望它会对你有所帮助。

嘿,这工作,

  $(function(){ $(".submitBtn").click(function () { $(".submitBtn").attr("disabled", true); $('#yourFormId').submit(); }); }); 

这是编辑过的脚本,希望它有所帮助,

   

使用setTimeout测试,这对我有用,我可以提交我的表单,请参阅此答案https://stackoverflow.com/a/779785/5510314

 $(document).ready(function () { $("#btnSubmit").click(function () { setTimeout(function () { disableButton(); }, 0); }); function disableButton() { $("#btnSubmit").prop('disabled', true); } }); 

该解决方案具有在移动设备上工作并且非常简单的优点:

 

阅读评论,似乎这些解决方案在浏览器中并不一致。 然后决定思考如何在jQuery和事件函数绑定出现之前10年前做到这一点。

所以这是我的复古时髦解决方案:

  

差异的主要在于我依靠能够通过在提交处理程序上返回false来停止表单提交,并且我正在使用全局标志变量 – 这将使我直接进入地狱!

但从好的方面来说,我无法想象任何浏览器兼容性问题 – 嘿,它甚至可能在Netscape中运行!

我把它放在我的全局代码中,以处理所有提交按钮:

 $("input[type='submit']").on("click", function (e) { $(this).attr("disabled", true); $(this).closest("form").submit() }); 

当我将bind部分添加到我的脚本文件时,我的问题解决了。

我完成了这两个步骤:

1 – 禁用按钮并阻止双重提交:

 $('form').submit(function () { $(this).find(':submit').attr('disabled', 'disabled'); }); 

2 – 如果发生validation错误,则启用提交按钮:

 $("form").bind("invalid-form.validate", function () { $(this).find(':submit').prop('disabled', false); }); 
 $(document).ready(function() { $(body).submit(function () { var btn = $(this).find("input[type=submit]:focus"); if($(btn).prop("id") == "YourButtonID") $(btn).attr("disabled", "true"); }); } 

并在服务器端代码中:

 protected void YourButton_Clicked(object sender, EventArgs e) { ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "", "$('#YourButtonID').removeAttr('disabled');", true); } 

正如许多人所指出的,禁用提交按钮会产生一些负面影响(至少在Chrome中它会阻止按下的按钮的名称/值被提交)。 我的解决方案是简单地添加一个属性以指示已请求提交,然后在每次提交时检查是否存在此属性。 因为我正在使用submit函数,所以只有在所有HTML 5validation成功后才会调用它。 这是我的代码:

  $("form.myform").submit(function (e) { // Check if we have submitted before if ( $("#submit-btn").attr('attempted') == 'true' ) { //stop submitting the form because we have already clicked submit. e.preventDefault(); } else { $("#submit-btn").attr("attempted", 'true'); } }); 
  $(function(){ $("input[type='submit']").click(function () { $(this).attr("disabled", true); }); }); 

是的。