绑定jQuery事件的简写

时间:2015-02-21 20:03:09

标签: javascript jquery

假设我们有一个简单的表单验证代码,用于在多个输入字段上绑定事件侦听器:

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

2 个答案:

答案 0 :(得分:1)

将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")选择器所选元素的范围。

答案 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[]也很快......