如何在提交前在表单中执行字符串拆分?

时间:2016-08-01 17:45:02

标签: javascript jquery html

我有一个表单,要求在提交之前验证输入数据。验证检查的类型 - 每个输入元素可以超过1 - 被输入到input元素中,并且执行的验证是通过jQuery进行的。

我的方法是将逗号所需的所有类型的验证(例如“空白,电子邮件”)放入输入元素的“checks”属性中。然后,jQuery将提取此部分,将其拆分为数组,并循环遍历每个验证类型。

问题是,在完成所有验证检查之前,我不想提交表单。但是当我使用“split”函数时,因为它返回一个数组,程序将其作为一个布尔值返回true,并在第一个输入元素之后提交表单。

以下是表单的示例,请注意它与所有其他字段类似:

Redmine

这是jQuery验证码:

<tr>
  <td>Full Name</td>
  <td><input type="TEXT" name="AccountName" check="blank"></td>
</tr>
<tr>
  <td>NRIC</td>
  <td><input type="TEXT" name="AccountNRIC" check="blank,nric" maxlength="9"></td>
</tr>

我应该澄清一下,还没有添加错误检查变量,因为代码仍在部分测试中。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

// PERFORM VALIDATION CHECKS
$("form").submit(function()
                 {
  // LOOP THROUGH ALL INPUT FIELDS
  $("form input, form textarea, form select").each(function(e)
                                                   {
    // IF NONE OF THE INPUT'S PARENTS ARE HIDDEN
    if($(this).parents(":hidden").length == 0)
    {
      var _hasError = false;
      var thisValue = $(this).val();
      var checkWhat = $(this).attr("check");
      var checkArray = checkWhat.split(",");
      for(var i=0; i<checkArray.length; i++)
      {
        switch(checkArray[i])
        {
          case "blank": if (!CheckBlank(thisValue)) { _hasError = true; } ; break;
          case "nric": if (!ValidateNRIC(thisValue)) { _hasError = true; }; break;
          case "email": if (!ValidateEmail(thisValue)) { _hasError = true; }; break;
        }
      }

      if (_hasError) e.preventDefault();
    }
  });
});

答案 1 :(得分:1)

您可以停止表单提交默认操作,执行您想要的逻辑,然后提交。

// PERFORM VALIDATION CHECKS
$("form").submit(function( event ){
    event.preventDefault(); // stops submit action

    // do your form validation here.

});

也没有检查HTML属性。你可以使用它,但它不是标准的。或者你可以抓住输入值。大多数人将数据添加到自定义HTML属性(数据检查)。