2010-07-29 13 views
12

Ho un elemento ul con molti elementi li:Utilizzo di delegate() con hover()?

<ul> 
    <li></li> 
    ... 
</ul> 

quando l'utente passa il mouse su un elemento li, mi piacerebbe mostrare alcuni pulsanti nascosti sulla Li, quando smettono di hovering, nascondere i pulsanti ancora. Cercando di utilizzare delegato:

$("#myList").delegate("li", "hover", function() { 
    if (iAmHovered()) { 
     showButtons(); 
    } else { 
     hideButtons(); 
    } 
}); 

quanto sopra viene chiamato sia per hover e 'un-hover'. Come posso distinguere se si tratta di un permesso o di entrare?

Inoltre, ho ottenuto questo campione da questa domanda: .delegate equivalent of an existing .hover method in jQuery 1.4.2

in cui Nick dice:

Questo dipende [#myList] non sempre sostituiti tramite la tecnologia AJAX o in altro modo, però, dal momento che è lì che il conduttore dell'evento vive.

io sostituire il contenuto di #myList però, utilizzando:

$("#myList").empty(); 

volontà che causano un problema?

Grazie

risposta

19

È necessario testare per il tipo di evento, come questo:

$("#myList").delegate("li", "hover", function (event) { 
    if (event.type == 'mouseover') { 
     showButtons(); 
    } else { 
     hideButtons(); 
    } 
}); 

Poiché c'è un solo gestore di correre per entrambi eventi, stiamo verificando per vedere quale licenziati, e l'esecuzione appropriata codice.

Contrariamente al bindinghover direttamente all'elemento in cui è possibile accettare due gestori per i due tipi di evento.


EDIT: nota che a partire jQuery 1.4.3, il tipo di evento che viene segnalato quando utilizza 'hover' con .delegate() o .live() non mouseover/mouseout è (come dovrebbe essere). Ora sarà mouseenter/mouseleave, che sembra semplicemente sciocco dal momento che sono eventi non-bubbling.

Quindi la dichiarazione if() sarà simile:

if (event.type == 'mouseenter') { 
    //... 
+0

fresco grazie che funziona. – user246114

0

È possibile dichiarare la funzione di gestione in modo che presta attenzione all'argomento evento, e quindi controllare il tipo.