表单提交时,jquery禁用提交按钮

sca*_*and 25 forms jquery submit

无论出于何种原因,尽管此代码确实刷新了页面,但没有字段被发布...

$('form').submit(function(){
    $('input[type=submit]', this).attr('disabled', 'disabled');
});
Run Code Online (Sandbox Code Playgroud)

有没有更好的编码方式?

Dio*_*ane 37

您的代码正在更改表单的提交操作.它不是提交,而是更改按钮属性.

试试这个:

$('input[type=submit]').click(function() {
    $(this).attr('disabled', 'disabled');
    $(this).parents('form').submit();
});
Run Code Online (Sandbox Code Playgroud)

  • 如果通过其他方式提交表单(例如在文本框中按Enter键),则无效. (13认同)
  • 这不适用于Chrome 45.0.2454.99 (4认同)
  • 这也不起作用.我所要做的就是阻止人们双重提交表格.IE一旦点击"提交",提交按钮应该被禁用,表单应该被提交,并且所有$ _POST变量都应该被设置. (2认同)
  • 这会破坏 HTML5 验证。 (2认同)

ryb*_*111 30

我已经看到了几种方法:

  • 单击时禁用按钮
  • 在提交时禁用按钮
  • 在提交时禁用表单

但似乎没有一个像预期的那样工作,所以我制定了自己的方法.

在您调用的表单中添加一个类,submit-once并使用以下jQuery:

$('form.submit-once').submit(function(e){
  if( $(this).hasClass('form-submitted') ){
    e.preventDefault();
    return;
  }
  $(this).addClass('form-submitted');
});
Run Code Online (Sandbox Code Playgroud)

这会为您的表单添加另一个类:form-submitted.然后,如果您尝试再次提交表单并且它具有此类,则jQuery将阻止表单提交并退出该函数,return;因此不会重新提交任何内容.

我选择使用$('form.submit-once')而不是$('form')因为我的一些表单使用Ajax,它应该能够多次提交.

你可以在这个jsFiddle上测试它.我添加target="_blank"到表单中,以便您可以多次测试提交表单.

旁注:您可能希望通过阻止服务器端的双提交来考虑非JS用户.例如,有一个存储最后提交日期/时间的会话变量,并在3秒内忽略任何进一步的提交.

  • 我喜欢这个解决方案!禁用该按钮似乎取消了HTML5表单字段验证.但是这个解决方案很高兴让浏览器运行表单字段验证规则. (2认同)
  • 控制提交的好方法.这种方法没有发现任何问题. (2认同)

naX*_*aXa 9

我不知道为什么有问题的代码不起作用。这是一个类似且简单的代码片段,我建议您不要将事情复杂化。

$("form").submit(function () {
    // prevent duplicate form submissions
    $(this).find(":submit").attr('disabled', 'disabled');
});
Run Code Online (Sandbox Code Playgroud)

对我来说的优势:

  • 它适用于 HTML5表单验证
  • 它以通用方式编写,因此可以“按原样”重新使用。