javascript - 绑定(bind) jQuery 事件的简写

标签 javascript jquery

假设我们有一个简单的表单验证代码,可以在多个输入字段上绑定(bind)事件监听器:

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

最佳答案

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

关于javascript - 绑定(bind) jQuery 事件的简写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28650683/

相关文章:

javascript - 防止 iframe 重新加载父级

javascript - 当 child 通过 $(body) 绑定(bind)时,停止在父 div 上传播?

javascript - 如何在codeigniter中使用引导弹出窗口

javascript - 避免下拉列表中的重复记录 Javascript PHP

javascript - 可排序列表会影响周围的其他元素

javascript - 为什么 JavaScript 样式适用于除 Internet Explorer 之外的所有浏览器?

jquery - 如果 li 在 ajax 加载的内容中有 ul

jquery - 单击图像按钮时工具提示保持可见

php - jquery 加载传递参数

javascript - jQuery .text() 返回的字符串的行为与字符串不同