在Bootstrap Validator Form中停止默认表单提交

时间:2014-06-24 00:46:10

标签: javascript jquery validation jqbootstrapvalidation

我已经看过几次这样的问题,但它们似乎并不适用于我的情况。

我的表单是在测试验证之前提交的。

形式:

<form accept-charset="UTF-8" action="/user/fact" data-bv-submitbuttons="button[type='submit']" data-remote="true" data-toggle="validator" id="user_fact_form" method="post" role="form"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
  <div class="form-group">
    <label for="key">Title</label>
    <input class="form-control" id="key" name="key" type="text" value="" />
  </div>
  <div class="form-group">
    <label for="value">Value</label>
    <input class="form-control" id="value" name="value" type="text" value="" />
  </div>
  <div class="form-group">
    <input class="btn btn-primary" disable="true" name="commit" type="submit" value="Add" />
  </div>
</form>

的javascript:

$('#user_fact_form').bootstrapValidator({
  live: 'enabled',
  message: 'This value is not valid',
  submitButton: '$user_fact_form button[type="submit"]',
  submitHandler: function(validator, form, submitButton) {
      $.post(form.attr('action'), form.serialize(), function (result) {
          $("#facts_tbody").append(result.data);
      });
      return false;
  },
  feedbackIcons: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
  },
  fields: {
      key: {
          selector: '#key',
          validators: {
              notEmpty: {
                  message: 'The title is required and cannot be empty'
              }
          }
      },
      value: {
          selector: '#value',
          validators: {
              notEmpty: {
                  message: 'The value is required and cannot be empty'
              }
          }
      }
  }
});

有关如何在表单验证之前禁用提交按钮的任何想法?

3 个答案:

答案 0 :(得分:11)

最后,我需要做的是使用action="javascript:return;"禁用表单操作并使用Jquery AJAX方法发布数据:

$('#user_fact_form').bootstrapValidator({
  live: 'enabled',
  message: 'This value is not valid',
  submitButton: '$user_fact_form button[type="submit"]',
  submitHandler: function(validator, form, submitButton) {
      $.ajax({
          type: 'POST',
          url: 'my_form.url',
          data: $(form).serialize(),
          success: function(result) {
              $("#facts_tbody").append(result);
              $("#key").val('');
              $("#value").val('');
              $("#user_fact_form").data('bootstrapValidator').resetForm();
          }
      });
      return false;
  },
  feedbackIcons: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
  },
  fields: {
      key: {
          selector: '#key',
          validators: {
              notEmpty: {
                  message: 'The title is required and cannot be empty'
              }
          }
      },
      value: {
          selector: '#value',
          validators: {
              notEmpty: {
                  message: 'The value is required and cannot be empty'
              }
          }
      }
  }
});

答案 1 :(得分:5)

你需要这样做:

$("#yourform").submit(function(ev){ev.preventDefault();});
$("#submit").on("click", function(){

   var bootstrapValidator = $("#yourform").data('bootstrapValidator');
   bootstrapValidator.validate();
   if(bootstrapValidator.isValid())
     $("#yourform").submit();
   else return;

});

答案 2 :(得分:0)

我很少使用jQuery,所以我的语法知识很差,我编写自己的验证脚本,所以我对Bootstrap Validator一无所知。但是在vanilla / native Javascript中,您必须将input type="submit"更改为input type="button" onclick="validateAndSend()"。然后该函数将包含submit命令。这是一个演示代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Demo Submit with/without validation</title>
</head>
<body>
    <form name="theForm" action="form_data_handler.php">
        <input type="text" name="firstField"><br>
        <input type="button" value="Validate and send" onclick="validateAndSend()"><br>
        <input type="submit" value="Just send">
    </form>
    <script>
        function validateAndSend() {
            if (theForm.firstField.value == '') {
                alert('The first field is a required field.');
                return false;
            }
            else
                theForm.submit();
        }
    </script>
</body>
</html>

现场演示:http://codepen.io/anon/pen/yDtab?editors=100