2010-07-29 14 views
12

Tengo un elemento ul con muchos elementos li:Usando delegate() con el control deslizante()?

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

cuando el usuario pasa el ratón sobre un elemento li, me gustaría mostrar algunos botones ocultos en la li, cuando dejan flotando, ocultar los botones de nuevo. Intentando usar delegar:

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

se llama a lo anterior tanto para el vuelo estacionario como para el 'un-hover'. ¿Cómo puedo distinguir si es un permiso o no?

Además, tengo esta muestra a partir de esta pregunta: .delegate equivalent of an existing .hover method in jQuery 1.4.2

en la que Nick dice:

Esto depende de [#myList] no siendo sustituidos a través de AJAX o de otra manera, sin embargo, ya que es donde el manejador de eventos vive.

Yo sustituir el contenido de #myList embargo, usando:

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

voluntad que causa un problema?

Gracias

Respuesta

19

Es necesario poner a prueba para el tipo de evento, como esto:

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

Dado que sólo hay un controlador ejecute para ambos eventos, estamos comprobando para ver cuál se dispararon, y ejecutando el apropiado código.

A diferencia de vinculantehover directamente al elemento donde puede aceptar dos controladores para los dos tipos de eventos.


EDIT: nota de que al jQuery 1.4.3, el tipo de evento que se informa al utilizar 'hover' con .delegate() o .live() ya mouseover/mouseout no es (como debería ser). Ahora será mouseenter/mouseleave, lo cual parece una tontería ya que son eventos que no producen burbujas.

Así que la declaración if() se vería así:

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

frescos que funciona gracias. – user246114

0

puede declarar la función de controlador de modo que presta atención al argumento de evento, y luego comprobar el tipo.

Cuestiones relacionadas