验证标志在jquery中失败

时间:2013-10-23 09:06:39

标签: jquery

我遇到了一个问题,一个标志没有正确重置。

我有以下代码。我正在编写特定于IE8的代码。在字段模糊时,它遍历字段的类,如果任何类验证返回false,则应显示错误并设置flag4=false。然后单击提交按钮,它需要检查所有标志是否为真,如果是,则返回true。

但现在,on blur正确发生。如果任何验证失败,则显示错误,稍后如果我们将错误更改为正确格式,则显示绿色。但flag4总是返回false。由于它总是返回false,因此表单永远不会成功提交,用户也无法移动到下一页。我的问题是,我应该在哪里重置flag4的值?

我尝试了很多选项,但点击按钮就失败了。一旦flag4=false,即使正确地给出了所有字段,它也不会成为现实。

var flag4 = true;
if(navigator.appVersion.indexOf("MSIE 8.0") != -1) {
    var firsttime=false;
    var validators = {
        fn1: function(val) {
            //return true or false;
        },
        fn2: function(val) {
            //return true or false;
        }
    };

    $('#submit_form :input').not('#id1,#id2,#id3').blur(function() {
        var input = $(this);
        var returnVal1 = true;
        input.next('div.error_text').remove();
        input.removeClass('highlight');
        // Get all the classes of the current input
        if(this.className) {
            var classes = this.className.split(/\s+/);
            for(var p in classes) {
                if(classes[p] in validators) {
                    returnVal1 = returnVal1 && validators[classes[p]] (input.val());
                }
            }
        }

        if(returnVal1 == false) {
            firsttime=true;
            $(this).removeClass('green');
            $(this).addClass('highlight');
            var $msg = $(this).attr('title');
            input.after('<div class="error_text">'+$msg+'/div>');
            flag4 = false; 
        }

        if(returnVal1 == true && firsttime == true) {
            input.addClass('green');
        }

    });
}

$('#submitbtn').click(function() {
    var flag1, flag2, flag3 = true;
    if(flag1 && flag2 && flag3 && flag4) {
        returnvalue = true;
    } else{
        returnvalue = false;
    }
    return returnvalue;
});

如果用户第一次进入firsttime=true时,任何验证都返回false。用户第二次输入正确的值时,该字段应变为绿色。为此我使用if(returnVal1 == true && firsttime == true)

1 个答案:

答案 0 :(得分:0)

就像@nnnnnn在评论中所说,flag4被设置为true的唯一地方是变量声明。但是为什么不将它添加到onblur函数的开头,然后将其设置为true,除非它被其他内容设置为false,即出现错误并进行设置到false

$('#submit_form :input').not('#id1,#id2,#id3').blur(function() {
        flag4 = true;
        // ...
});