[英]Shorthand for binding jQuery events
假设我们有一个简单的表单验证代码,该代码将事件侦听器绑定到多个输入字段:
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:..
});
将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")
选择器选择的元素的范围。
我想出了这个...(尽管在此您需要将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[]
都很快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.