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

时间:2013-11-21 09:54:02

标签: javascript jquery

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

我有一个包含大量文本字段的表单。我试图循环遍历所有字段和每个字段的模糊我正在做一些验证。如果任何字段的任何验证失败,则不应提交表单。但是现在我在这方面遇到了很大麻烦。如果我有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。但它的回归真实。我想我没有正确地重置旗帜

1 个答案:

答案 0 :(得分:0)

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

<强> 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小提琴: http://jsfiddle.net/uC3mW/1/

希望您可以将此示例中的原则应用于您的代码。主要区别在于您提供的代码未验证模糊的每个输入。