我有一个表单,要求在提交之前验证输入数据。验证检查的类型 - 每个输入元素可以超过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>
我应该澄清一下,还没有添加错误检查变量,因为代码仍在部分测试中。
非常感谢任何帮助!
答案 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属性(数据检查)。