我被困在一个问题,其中一个标志没有得到正确重置。验证标志失败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;
});
如果任何验证当用户进入第一次返回false,firsttime=true
。用户第二次输入正确的值时,该字段应变为绿色。对于我使用if(returnVal1 == true && firsttime == true)
记录你用console.log()得到的结果可能会产生一些影响 – Ashalynd
我试图alert()。但是,一旦flag4 = false,即使正确给出所有字段后,它也不会变为真。 – user1049057
你的代码中'flag4'设置为'true'的唯一地方就是声明它的地方,而且这行只能执行一次。你需要在你的事件处理程序的某个地方将'flag4'设置回'true',但是如果你的模糊处理程序可以被调用多个元素,但只测试当前元素,那么这些元素如何共享相同的标志? – nnnnnn