循环遍历所有字段,如果任何一个字段的验证失败jquery,则返回false

loop through all fields and return false if validation of any one field fails jquery

本文关键字:字段 失败 验证 jquery false 返回 任何一 遍历 如果 循环      更新时间:2023-09-26

我在重置标志变量时遇到了大麻烦。我不确定我在哪里失踪了:(

我有一个有很多文本字段的表单。我试图循环浏览所有字段,并在每个字段的模糊上进行一些验证。如果任何字段的验证失败,它就不应该提交表格。但现在我在做这件事时遇到了很大的麻烦。如果我有3个字段,我输入的第一个值是错误的,接下来的两个字段如果我给出的是正确的,那就是提交了不应该提交的表格。有人能帮我吗?

var globalValid = false;
var validators = {
        spacevalidation: function(val) {
        if($.trim(val) != "")
            return true;     
        else
            return false;
        },
                //Other validation fns 
};
$('#form1 .required').blur(function(){
var input = $(this);
var tmpValid = true;
input.each(function(){
    var classReturn = true;
    validatorFlag = true;
    input.next('ul.innererrormessages').remove();
    input.removeClass('required_IE');
    if(firstTime)
    {
        input.addClass('valid');
    }
    if (!input.val()) {
        input.removeClass('valid');
        input.addClass('required');
        var $msg = $(this).attr('title');
        input.after('<ul class="innererrormessages"><li>'+$msg+'</li></ul>');
        globalValid = false;
    }
    else{
        if(this.className) {
            var classes = this.className.split(/'s+/);
            for(var p in classes) {
                if(classes[p] in validators) {
                    tmpValid = (tmpValid && validators[classes[p]] (input.val())) ? tmpValid : false;
                }
            }
        }
        if(tmpValid == false){
            input.removeClass('valid');
            input.addClass('required');
            var $msg = input.attr('title');
            input.after('<ul class="innererrormessages"><li>'+$msg+'</li></ul>');
        }
    }
});

globalValid=tmpValid;});

$('#form1').submit(function() {
var returnValue = true;
if(globalValid )
{
    returnValue = true;
}
else{
    returnValue = false;
}
alert("returnValue "+returnValue);
return returnValue;
});

使用此代码,若我为第一个字段输入了错误的值,并为其他两个字段输入正确的值,理想情况下它应该返回false。但它又回来了。我认为我没有正确地重置标志

检查这个例子,它提供了需要发生的事情的基本前提。每次触发模糊事件时,必须验证所有三个字段,并将验证结果存储到全局变量中。

HTML

<form>
    <input />
    <input />
    <input />
    <button type="submit">Submit</form>
</form>

Javascript

var globalValid = false; //Global validation flag

$("input").blur(function(){
    //local validation flag
    var tmpValid = true;
    //When one input blurs validate all of them
    $("input").each(function(){
         //notice this conditional will shortcircuit if tmpValid is false
         //this retains the state of the last validation check
         //really simple validation here, required value less than 10
         tmpValid = (tmpValid && this.value && this.value < 10) ? tmpValid:false;
    });
    //assign the result of validating all inputs to a global
    globalValid = tmpValid;
});
$("form").submit(function(e){
    //This is just here to make the fiddle work better
    e.preventDefault();
    //check the global validation flag when submitting    
    if(globalValid){
        alert("submitted");
    }else{
        alert("submit prevented");
    }
});

JS Fiddle:http://jsfiddle.net/uC3mW/1/

希望您能将本例中的原则应用到您的代码中。主要区别在于您提供的代码没有验证模糊上的每个输入。