2013-01-18 106 views
6

使用jQuery想知道什麼是正確的方法來使用jQuery命名空間有多重事件「上」 ......命名空間的多個事件「的」

例如:

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

這不是工作.. 。如果我刪除了「.namespace」,它確實有效。 jQuery的對有工作的命名空間

例子:

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

我知道我能做到這兩個的mouseenter /鼠標離開事件seprately ......只是好奇,如果有通過對象

通過命名空間的方式

謝謝!

+0

查看源代碼,應該可以工作... –

+3

您的代碼按原樣運行。 http://jsfiddle.net/GHmaE/ –

+0

我的代碼確實工作得很完美...我的問題是我有另一個命名空間衝突。 = /謝謝! – Roi

回答

4

要附加到你必須通過空間的多個事件分隔的事件列表:

$(".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); 
    } 
}); 

通過它似乎工作,我不能確認,因爲我不在我的機器上。試一試。

+0

是的,這工作..但是我需要爲每個事件不同的功能 – Roi

+0

如果你需要一個不同的功能,爲什麼你把它們合併? – epascarello

+0

用jquery「on」模擬「懸停」。 mouseenter有一個功能,mouseleave有一個功能。我將它們組合起來的原因是我不必聲明兩次父選擇器/事件選擇器。只是試圖保持它很好地包裹 – Roi

0

從您在評論中所說的內容中,您想爲每個名稱空間啓用不同的功能。看起來很奇怪,你會結合他們想要做一些不同的事情。但是如果您想知道觸發事件的原因,可以使用event.type

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

JSFiddle

+0

在我看來,用(現在移除的).hover方法來做這件事並不奇怪。我寧願只使用兩個單獨的處理程序,而不是添加更多的邏輯。 –

+0

@KevinB,爲什麼懸停被刪除。大聲笑 – epascarello

3

下面的代碼實際上是正確的 - 我有一個問題與早期代碼命名空間衝突。

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

通常你會編輯原來的問題來添加這個信息。 –