jquery新手:将验证与隐藏提交按钮相结合

时间:2010-04-05 22:23:39

标签: jquery jquery-validate validation double-submit-prevention

我是一个新的jQuery。我已经验证了使用我的表单(MVC 1.0 / C#):

      <script type="text/javascript">
      if (document.forms.length > 0) { document.forms[0].id = "PageForm"; document.forms[0].name = "PageForm"; }
      $(document).ready(function() {
          $("#PageForm").validate({
              rules: {
                  SigP: { required: true }
              },
              messages: {
                  SigP: "<font color='red'><b>A Sig Value is required. </b></font>"
              }
          });

      });
  </script>

我还想隐藏“提交”按钮,以防止在控制器完成和重定向之前导致重复输入(我正在使用GPR模式)。以下工作用于此目的:

  <script type="text/javascript">  
  //
  // prevent double-click on submit
  //
      jQuery('input[type=submit]').click(function() {
          if (jQuery.data(this, 'clicked')) {
              return false;
          }
          else {
              jQuery.data(this, 'clicked', true);
              return true;
          }
      });
  </script>

然而,我不能让两者一起工作。具体来说,如果在单击“提交”按钮后验证失败(根据表单的工作方式发生),那么除非我执行浏览器刷新以重置“已点击”属性,否则我无法再次提交表单。

如何重写上面的第二种方法,不设置点击的属性除非表格验证?

THX。

3 个答案:

答案 0 :(得分:1)

对于那些仍在寻找像我一样的答案的人,我就是这样做的:

$("#form1").validate({

    rules: {
        customer_title: "required",
        customer_firstName: "required",
        customer_lastName: "required"
        }
    },
    messages: {
        customer_title: "Please select a title",
        customer_firstName: "Please enter a firstname",
        customer_lastName: "Please enter a lastname"
        }
    },
        submitHandler: function(form) {
        //submitButtonX is the class attribute i placed on the button
        $('.submitButtonX').attr('disabled', 'disabled');
        form.submit();
    }
});

答案 1 :(得分:0)

如果您使用的是this验证插件,则会附带一个有效的()方法。

  jQuery('input[type=submit]').click(function() {
      var self = $(this);

      if (self.data('clicked')) {
          return false;
      } else if (self.closest('form').valid()) {
          self.data('clicked', true);

          return true;
      };
  });

甚至:

  jQuery('input[type=submit]').click(function(event) {
      var self = $(this);   

      if (self.closest('form').valid()) {
          self.attr('disabled', true);
      };
  });

答案 2 :(得分:0)

我会这样做:

$('#PageForm').submit(function() {
   if($(this).valid()) $(':submit', this).attr('disabled', true);
});

这是在提交表单时触发,查找内部的任何提交按钮,如果表单有效则禁用它。

准备好后,使用$('#PageForm :submit').removeAttr('disabled');重新启用该按钮。