表单验证插件因类失败

时间:2015-09-29 20:38:48

标签: javascript jquery

我正在使用我构建的验证器插件,并且每个问题都解决后,似乎出现了一个新问题。当前的问题是,当我使用一个类作为验证选择器时,任何具有该类的东西都会被验证,只要其中一个被填充,就会被接受。现在,虽然这对某些情况可能没问题,但并非所有情况都适用。

小提琴

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或类名。

1 个答案:

答案 0 :(得分:1)

马克,根据我的阅读,你试图创建一个插件来验证表单上的id或类。

你说: “目前的问题是,当我使用一个类作为验证选择器时,任何具有该类的内容都会被验证,只要其中一个被填充,就会被接受。”

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

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

希望这是有道理的。