带有多个事件处理程序的jQuery .on()方法&多个选择器

时间:2017-01-17 10:21:49

标签: jquery events event-handling jquery-selectors

所以我知道我们可以在.on()方法上有多个事件处理程序

$(document).on({
    'click': function (e) {
       // function
    },
    'hover': function (e) {
       // function    
    }
});

但无论如何我们可以为每个事件处理程序添加多个选择器吗?

像这样:

$(document).on('click', '#foo, .foo', function () { 
     // function
});

但有多个.on()方法:

$(document).on({
    'click', '#foo': function (e) {
       // doesn't work :(
    },
    'hover', '.foo': function (e) {
       // doesn't work :(    
    }
});

提前致谢

1 个答案:

答案 0 :(得分:5)

如果您想在不同的事件上使用不同的匹配元素,则需要使用不同的on调用。您可以使用单个on调用来挂接相同元素的多个事件,但不能将单个on用于事件和选择器的混合和匹配(也没有必要)。

当然,您可以创建自己的自己的功能。例如,有点像:

$.fn.mixon = function(events) {
    Object.keys(events).forEach(function(selector) {
        var entry = events[selector];
        Object.keys(entry).forEach(function(event) {
            this.on(event, selector, entry[event]);
        }, this);
    }, this);
    return this;
};

......你可以这样使用:

$(document).mixon({
    "#foo": {
        "click focus": function() {
           // ...
        }
    },
    ".foo": {
        click: function() {
           // ...
        }
    }
});