2015-09-29 68 views
0

我正在使用我构建的验证器插件,并且每解决一个问题,似乎都会出现一个新问题。目前的问题是,当我使用一个类作为验证选择器时,任何具有该类的类都将被验证,只要其中一个被填充,那么它就会被接受。现在,虽然对于某些情况这可能是可以的,但并非如此。表单验证插件失败,类

小提琴

http://jsfiddle.net/9gwuyras/2/

的验证插件的完整代码可以在小提琴发现为好。代码

部分,我认为这个问题正在引起

用小提琴为代码 Lines 497 - 514

推理它可能并不重要类选择是参考线set.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或类名。

回答

1

马克,从我读过的你试图创建一个插件来验证窗体上的ID或类。

你说: “当前的问题是,当我使用一个类作为验证选择,与该类东西被验证,只要其中一个被填充,然后被接受。”

发生这种情况的原因是,一旦你的插件被触发,它会通过匹配该类的任何东西'循环'(你的每个循环),即使包装在该类中的元素只填充一次(并且还有其他多个实例)。

你有很多选择,我的建议是:1)删除插件调用类的能力或2)通过检查它的状态来验证类。现在它只会通过并尝试验证所有应该基于状态验证一个类(checked,unchecked,.val等)。

希望是有道理的。