7

想知道使用 jquery "on" 命名多个事件的正确方法是什么......

例如:

$(".parent-selector").on({
"mouseenter.namespace": function() {
    // mouseenter event
},
"mouseleave.namespace": function() {
    // mouseleave event
}
}, ".selector");

这不起作用......如果我删除“.namespace”它确实有效。

带有工作命名空间的 jquery 示例:

$(".parent-selector").on("mouseenter.namespace", ".selector", function() { });

我知道我可以分别执行 mouseenter/mouseleave 事件......只是好奇是否有办法通过对象传递命名空间

谢谢!

4

3 回答 3

5

要附加到多个事件,您必须传递以空格分隔的事件列表:

$(".parent-selector").on("mouseenter.namespace mouseleave.namespace",
                         ".selector", function() { });

编辑:

您始终可以在回调中获取事件类型并在其中调用其他函数:

$(".parent-selector").on("mouseenter.namespace mouseleave.namespace", ".selector", function(e) {
    if (e.type == "mouseenter.namespace") {
        myMouseEnter(e);
    } else if (e.type == "mouseleave.namespace") {
        myMouseLeave(e);
    }
});

虽然它似乎有效,但我无法确认,因为我不在我的机器上。试试看。

于 2013-01-18T22:29:40.430 回答
3

下面的代码实际上是正确的——我在代码前面遇到了命名空间冲突的问题。

$(".parent-selector").on({
    "mouseenter.namespace": function() {
        // mouseenter event
    },
    "mouseleave.namespace": function() {
        // mouseleave event
    }
}, ".selector");
于 2013-01-18T22:39:41.547 回答
0

根据您在评论中所说的,您想为每个命名空间触发不同的函数。似乎很奇怪,您将它们结合起来想做一些不同的事情。但是如果你想知道是什么触发了事件,你可以使用event.type.

$("#foo").on("mouseover mouseout", ".bar",
    function(evt){
       console.log(evt.type); 
    }
);

JSFiddle

于 2013-01-18T22:35:46.910 回答