在使用了一些验证库之后,我最终决定推出自己的实现,因为没有一个库按照我想要的方式运行。下面的代码工作正常,但我认为它不是很地道。函数体很大,应该重构为更小的块。
我确信有很多方法可以改进我的代码,但我想就如何将大函数分解为更小的函数寻求具体建议,以便代码更容易理解。显然我想添加更多的验证功能,我不想创建一堆意大利面条。
验证应该发生在blur
一个元素上。通过插入和删除div
s,用户会收到问题通知。
验证功能:
(function($) {
$.fn.extend({
live_validate: function() {
return this.each(function() {
var inputs = $('input', $(this));
inputs.blur(function() {
var el = $(this);
el.siblings('div.feedback').remove();
if(el.hasAttr('required') && el.val() == '') {
el.after('<div class="feedback feedback-error">must be present</div>');
return;
}
if(el.hasAttr('minlength') && el.val().length < el.attr('minlength')) {
el.after('<div class="feedback feedback-error">is too small</div>');
return;
}
// no validation returned; all good.
el.filter(":visible").after('<div class="feedback feedback-ok"></div>');
});
});
}
});
})(jQuery);
这是我用来检查属性是否存在的快速助手。我需要知道该属性是否存在。有一个更好的方法吗?
$.fn.hasAttr = function(name) {
return (this.attr(name) !== undefined && this.attr(name) !== false);
};
最后,在我想要的表单上调用验证器。
$(document).ready(function() {
$("form.new_user").live_validate();
}