繁体   English   中英

绑定jQuery事件的快捷方式

[英]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更改为NameSurnameEmailPhone ,然后可以公式确定相关的验证器:

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));
    }
});

然后,您要做的就是确保所有需要验证的输入字段都具有

  • 适当的ID
  • 相应的验证功能

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM