我编写了自己的通用验证插件,它使用一个函数来检查输入是否有效,然后对第一个函数确定输入有效且无效的每种情况进行回调。 / p>
基本上,该插件包含两个功能,' $。fn.validation()'将包含验证逻辑和成功/失败回调的对象绑定到元素,然后' $。fn.validate()'要么调用验证对象,要么在其中传入新对象,将为此一个实例使用新对象。可以在此处找到下面描述的插件和a jsfiddle demonstrating the issues的实现。
我的问题是虽然文本输入和texareas似乎在所有情况下都能很好地工作,但是根据如何选择某些元素(例如复选框输入),尽管元素在由元素返回的元素集中,但元素可能无法验证。 jQuery元素
例如,以下选择器不会导致复选框被验证
$('input, textarea').validate();
然而,更具体的选择器将导致复选框被验证
$('input[type=checkbox]').validate();
再次,please checkout the jsfiddle我已经复制了问题
答案 0 :(得分:1)
问题是您在this.each()
代码中的.validate()
循环中 提取验证选项
$.fn.validate = function(options){
var validation = $.extend({
check: $(this).data("check") || function(input){ return true },
success: $(this).data("success") || function (input){},
failure: $(this).data("failure") || function (input){}
}, options);
var valid = true;
this.each(function(){
if(validation.check($(this))){
validation.success($(this));
} else {
validation.failure($(this));
valid = false;
}
});
return valid;
};
设置validation
时,您将获取所选列表中第一个元素的验证配置,这将是用于所有元素的验证配置。
相反,该代码应该在this.each()
回调中:
$.fn.validate = function (options) {
var valid = true;
this.each(function () {
var validation = $.extend({
check: $(this).data("check") || function (input) {
return true
},
success: $(this).data("success") || function (input) {},
failure: $(this).data("failure") || function (input) {}
}, options);
if (validation.check($(this))) {
validation.success($(this));
} else {
validation.failure($(this));
valid = false;
}
});
return valid;
};
当您单独执行input[type=checkbox]
时,它会起作用,因为验证配置将是复选框的配置(该选择器选择的唯一元素)。