我在重置标志变量时遇到很大麻烦。我不确定我在哪里失踪:(
我有一个包含大量文本字段的表单。我试图循环遍历所有字段和每个字段的模糊我正在做一些验证。如果任何字段的任何验证失败,则不应提交表单。但是现在我在这方面遇到了很大麻烦。如果我有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。但它的回归真实。我想我没有正确地重置旗帜
答案 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/
希望您可以将此示例中的原则应用于您的代码。主要区别在于您提供的代码未验证模糊的每个输入。