Неудачный флаг проверки в jquery

0

Я застрял в проблеме, когда флаг не получает сброс правильно.

У меня есть код ниже. Я пишу этот код, специфичный для IE8. При размытии полей он выполняет итерации через классы для поля, и если какая-либо проверка класса возвращает false, он должен отображать ошибку и устанавливать flag4=false. Затем, нажав кнопку отправки, необходимо проверить, истинны ли все флаги, а если они есть, верните true.

Но теперь, on blur происходит правильно. Если какие-либо проверки не выполняются, отображается ошибка, а затем, если мы изменим ошибку, чтобы исправить формат, она отображается зеленым цветом. Но flag4 всегда возвращает false. Поскольку он всегда возвращает false, форма никогда не отправляется успешно, и пользователь не может перейти на следующую страницу. Мой вопрос: где я должен сбросить значение flag4?

Я пробовал много вариантов, но при нажатии кнопки он терпит неудачу. Если flag4=false, это не становится истинным даже после правильного 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;
});

Если какая-либо проверка возвращает false, когда пользователь вводит первый раз, firsttime=true. Во второй раз, когда пользователь вводит правильное значение, это поле должно стать зеленым. Для этого я использую if(returnVal1 == true && firsttime == true)

  • 0
    регистрация того, что вы получаете с console.log () может пролить свет
  • 0
    Я пытался предупредить (). Но как только flag4 = false, он не становится истинным даже после правильного задания всех полей.
Показать ещё 2 комментария
Теги:

1 ответ

0

Подобно @nnnnnn, указанному в комментариях, единственное место, где flag4 устанавливается в true находится в объявлении переменной. Но почему бы не добавить его в начало вашей функции onblur, а затем он будет установлен в true если он не установит значение false onblur либо другим, то есть там есть ошибка, и вы установите значение false.

$('#submit_form :input').not('#id1,#id2,#id3').blur(function() {
        flag4 = true;
        // ...
});
  • 0
    Привет, Джошуа. Спасибо за ваш ответ. Но если я сделаю flag4 = true, как вы упомянули, if (returnVal1 == false) {// ... flag4 = false; } else {// ... flag4 = true; } тогда, если проверка первого поля ложна, а проверка второго поля - истина. Затем он перейдет на следующую страницу, даже если проверка первого поля неверна. Надеюсь, вы поняли, что я пытаюсь сказать
  • 0
    Это может быть проблемой с настройкой returnVal1 . В этом случае попробуйте мое первое предложение.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню