Я застрял в проблеме, когда флаг не получает сброс правильно.
У меня есть код ниже. Я пишу этот код, специфичный для 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)
Подобно @nnnnnn, указанному в комментариях, единственное место, где flag4
устанавливается в true
находится в объявлении переменной. Но почему бы не добавить его в начало вашей функции onblur
, а затем он будет установлен в true
если он не установит значение false
onblur
либо другим, то есть там есть ошибка, и вы установите значение false
.
$('#submit_form :input').not('#id1,#id2,#id3').blur(function() {
flag4 = true;
// ...
});
returnVal1
. В этом случае попробуйте мое первое предложение.