我正在使用我构建的验证器插件,并且每个问题都解决后,似乎出现了一个新问题。当前的问题是,当我使用一个类作为验证选择器时,任何具有该类的东西都会被验证,只要其中一个被填充,就会被接受。现在,虽然这对某些情况可能没问题,但并非所有情况都适用。
小提琴
http://jsfiddle.net/9gwuyras/2/
验证插件的完整代码也可以在小提琴中找到。
我认为导致问题的部分代码
使用小提琴作为代码行的参考
Lines 497 - 514
推理类选择器多次出现在setting.selectors []数组中可能并不重要,但这是一个可能的选择。
for(var control in controls){
if(typeof controls[control] != 'object'){
console.log("controls."+control+" must be an object. Skipping this element");
continue;
}else if(typeof controls[control].validate == 'undefined'){
console.log("controls."+control+".validate must be defined");
continue;
}
$this.find('input, textarea, select').each(function(){
if($(this).is('#'+control)){
setControlData('#'+control, controls[control]);
settings.selectors.push('#'+control);
}else if($(this).hasClass(control)){
setControlData('.'+control, controls[control]);
settings.selectors.push('.'+control);
}
});
}
Lines: 397 to 401
推理是它可能只针对该类选择器的任何表单组而不是焦点
var formGroup = null;
if(type != "radio" && type != "checkbox"){
formGroup = $(element).closest('.form-group');
value = $(element).val();
}
这是我迄今为止最多的,我将继续发布更新,因为我通过它。请索取可能需要的任何其他信息。非常感谢所有帮助!
修改
我忘记了最重要的一件事情。如何调用插件
$('#test').validator({
controls : {
name : {
validate : "notEmpty"
},
dob : {
validate : ['notEmpty', 'isDateTime'],
dateFormat : 'm/d/Y'
},
gender : {
validate : "notEmpty"
}
},
bindInput : true,
onSubmit : function(){}
});
controls
对象中的键可以是id或类名。
答案 0 :(得分:1)
马克,根据我的阅读,你试图创建一个插件来验证表单上的id或类。
你说: “目前的问题是,当我使用一个类作为验证选择器时,任何具有该类的内容都会被验证,只要其中一个被填充,就会被接受。”
这种情况正在发生,因为一旦你的插件被触发它就会'循环'(你的每个循环)通过匹配该类的任何东西......即使包含在该类中的元素只填充一次(并且还有多个其他实例它)。
你有很多选择,我建议:1)删除插件调用类的能力或2)通过检查类的状态来验证类。现在它只会通过并尝试验证所有内容,它应该只验证基于状态的类(已检查,未检查,.val等)。
希望这是有道理的。