提交后仅禁用提交按钮
我有以下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); }); });
是的。