您不能像这样将多个事件附加到多个函数。您可以做的是each在包含所有所需信息的对象上使用函数。您甚至可以将您的命名空间名称(哈哈)存储在一个单独的变量中:
Example on jsFiddle
var $root = $(".big-ul");
var namespace = 'namespace';
var events = [
{
event: "click"+"."+namespace,
delegate: "li",
fn: function(event){
$(this).toggleClass("active");
}
},
{
event: "mouseenter"+"."+namespace,
delegate: "li",
fn: function(event){
$(this).addClass("inside");
}
},
{
event: "mouseleave"+"."+namespace,
delegate: "li",
fn: function(event){
$(this).removeClass("inside");
}
}
]
for(i=0;i<events.length;i++){
$root.on(events[i].event, events[i].delegate, events[i].fn);
}
与公认解决方案相比的优势:
- 这是一种更加灵活的解决方案,因为当您始终使用相同的-Object 结构时,您可以
events跨模块发送 -Object 或使用单个函数动态绑定事件。event
- 您可以从一个根对象委托给不同的子节点,而不仅仅是一个。
示例:
/* events array*/
var events = [
{
root: "root-query-string",
event: "eventname",
delegate: "delegate-query-string",
fn: function
}
]
/* dynamic batch bind function */
function batchBind(events) {
for(i=0; i<events.length; i++){
$(el.root).on(events[i].event, events[i].delegate, events[i].fn);
}
}