2013-01-18 8 views
6

Domandandosi che cosa il metodo corretto per namespace più eventi utilizzando jQuery "on" ...namespacing più eventi utilizzando jQuery "on"

ad esempio:

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

Questo non funziona .. Se rimuovo ".namespace", funziona.

Esempio di jquery avanti con namespace di lavoro:

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

ho capito che posso fare entrambe le MouseEnter/eventi MouseLeave seprately ... solo curioso di sapere se c'è un modo per passare spazi dei nomi attraverso l'oggetto

Grazie!

+0

Guardando la fonte, questo dovrebbe funzionare ... –

+3

Il tuo codice funziona così com'è. http://jsfiddle.net/GHmaE/ –

+0

Il mio codice funziona perfettamente così come lo è ... il mio problema era che avevo un altro conflitto nello spazio dei nomi. =/Grazie! – Roi

risposta

4

Per collegare a più eventi è necessario passare uno spazio elenco di eventi separati:

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

Edit:

si può sempre ottenere il tipo di evento all'interno della richiamata e chiamare altre funzioni all'interno:

Althrough sembra funzionare, non posso confermarlo, perché non sono sulla mia macchina. Provaci.

+0

sì, funziona ... tuttavia ho bisogno di una funzione diversa per ogni evento – Roi

+0

Se hai bisogno di una funzione diversa, perché li stai combinando? – epascarello

+0

emulazione "hover" con jquery "on". mouseenter ha una funzione, mouseleave ha anther. il motivo per cui li sto combinando è che non devo dichiarare il selettore genitore/selettore eventi due volte. Sto solo cercando di tenerlo avvolto bene – Roi

0

Da quello che hai detto in un commento, vuoi attivare una funzione diversa per ogni spazio dei nomi. Sembra strano che tu li unisca per voler fare qualcosa di diverso. Ma se vuoi sapere che cosa ha scatenato l'evento, puoi usare event.type.

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

JSFiddle

+0

Non è più strano che farlo con (ora rimosso) metodo .hover secondo me. Preferirei usare solo due gestori separati piuttosto che aggiungere più logica. –

+0

@KevinB, quindi perché il hover è stato rimosso. lol – epascarello

3

il codice qui sotto è in realtà corretto - ho avuto un problema con namespacing conflitti in precedenza nel codice.

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

Normalmente dovresti modificare la domanda originale per aggiungere queste informazioni. –

Problemi correlati