2013-01-18 14 views
6

Zastanawiasz się, co prawidłowy sposób do przestrzeni nazw wiele zdarzeń przy użyciu jquery "on" ...przestrzeni nazw wiele zdarzeń przy użyciu jQuery "na"

na przykład:

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

to nie działa .. Jeśli usunę ".namespace", to działa.

Przykład jQuery na pracy z nazw:

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

Rozumiem mogę zrobić zarówno mouseenter/wydarzenia mouseLeave seprately ... po prostu ciekawy, czy istnieje sposób, aby przechodzić przez przestrzenie nazw obiektu

Dzięki!

+0

Patrząc na źródło, które powinno działać ... –

+3

Twój kod działa jak jest. http://jsfiddle.net/GHmaE/ –

+0

Mój kod działa idealnie, jak jest ... moim problemem było to, że miałem inny konflikt przestrzeni nazw. =/Dzięki! – Roi

Odpowiedz

4

Aby dołączyć do wielu zdarzeń trzeba przejść przestrzeń listę zdarzeń oddzielone: ​​

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

Edit:

Zawsze można dostać typ zdarzenia wewnątrz zwrotnego i wywołać inne funkcje wewnątrz:

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

Przez to wydaje się działać, nie mogę tego potwierdzić, bo nie jestem na mojej maszynie. Spróbuj.

+0

tak, to działa .. jednak potrzebuję innej funkcji dla każdego zdarzenia – Roi

+0

Jeśli potrzebujesz innej funkcji, dlaczego je łączymy? – epascarello

+0

emulacja "hover" z jquery "on". mouseenter ma jedną funkcję, mouseleave ma pylnik. powodem, dla którego je łączę jest to, że nie muszę zadeklarować dwa razy selektora nadrzędnego selektora/zdarzenia. Po prostu staram się go dobrze zapakować – Roi

0

Z tego, co powiedziałeś w komentarzu, chcesz wystrzelić inną funkcję dla każdego obszaru nazw. Wydaje się dziwne, że połączysz je, by zrobić coś innego. Ale jeśli chcesz wiedzieć, co spowodowało zdarzenie, możesz użyć event.type.

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

JSFiddle

+0

Nie jest to bardziej dziwne niż zrobienie tego z (teraz usuniętego). Metoda hover według mnie. Wolałbym używać dwóch oddzielnych procedur obsługi niż dodawać więcej logiki. –

+0

@KevinB, stąd dlaczego hover został usunięty. lol – epascarello

3

poniższy kod jest rzeczywiście poprawna - Miałem problem z przestrzeni nazw konflikt wcześniej w kodzie.

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

Zazwyczaj edytujesz oryginalne pytanie, aby dodać te informacje. –

Powiązane problemy