假设我们有一个简单的表单验证代码,用于在多个输入字段上绑定事件侦听器:
var self = this,
name = $("#name") || opts.name,
surname = $("#surname") opts.surname,
email = $("#email") || opts.email ,
phone = $("#phone") || opts.phone;
name.on('blur change', function() {
self.validateName(name);
});
surname.on('blur change', function() {
self.validateSurname(surname);
});
email.on('blur change', function() {
self.validateEmail(email);
});
phone.on('blur change', function() {
self.validatePhone(phone);
});
有没有办法缩短它而不会失去任何表现?例如,如果我想检查表单中是否存在某些输入,那么if(input){...}语句会有太多重复。
UPD:ID(或类)可以不同,函数可以接受带有输入字段的对象:
var validation = new Validation({
name: $('.name'),
surname:..
});
答案 0 :(得分:1)
将ID更改为Name
,Surname
,Email
,Phone
,然后可以通过公式确定相关验证码:
var self = this;
$("#Name, #Surname, #Email, #Phone").on('blur change', function() {
self['validate' + this.id]($(this));
});
修改强>
模糊/更改处理程序可以如下概括:
$("myForm input").on('blur change', function() {
var fn = self['validate' + this.id];
if(fn) {
fn($(this));
}
});
您需要做的就是确保所有需要验证的输入字段都有
if(fn)
测试可防止因任何不需要验证的输入(即没有验证功能)而抛出错误。
为了满足任何非输入,您需要扩大$("myForm input")
选择器所选元素的范围。
答案 1 :(得分:0)
我想出了这个......(虽然你需要将id #inputLname更改为#inputSurname)
var all = $("#inputFname, #inputLname, #inputEmail, #inputPhone");
all.on('blur change', function() {
var self = this, fnName = validate+self.attr("id").replace("input","");
self.window[fnName](self);
});
甚至window[]
也很快......