jQuery 具有多个事件处理程序和多个选择器的 .on() 方法
jQuery .on() method with multiple event handlers & multiple 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 :(
}
});
提前致谢
如果你想在不同的事件上使用不同的匹配元素,你需要使用不同的on
调用。您可以使用单个 on
调用为 same 元素挂钩多个事件,但不能使用单个 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() {
// ...
}
}
});
所以我知道我们可以在 .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 :(
}
});
提前致谢
如果你想在不同的事件上使用不同的匹配元素,你需要使用不同的on
调用。您可以使用单个 on
调用为 same 元素挂钩多个事件,但不能使用单个 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() {
// ...
}
}
});