2012-06-10 11 views
5

No estoy seguro de cómo estructurar lo siguiente. Esto funciona bien:Traducir esto jquery into coffee script?

$('.hover li').on 'hover', (ev) -> 
    $(this).addClass('active') 

Sé que puedo utilizar 'alternar' en lugar de 'addClass', pero por otras razones que necesito un controlador de salida función pasada. Así que probé esto:

$('.element').on 'hover', (ev) 
    -> $(this).addClass('active'), 
    -> $(this).removeClass('active') 

Esto devuelve un error - 'inesperado'. He intentado con otras variaciones, y la mayoría de los ejemplos que he encontrado en línea no usan el formato .on 'hover' (ev) ->.

Respuesta

8

no puede utilizar on() para esto si desea conectar los dos controladores de eventos a la vez.

Es necesario utilizar hover():

$('.element').hover(
    (ev) -> $(this).addClass 'active' 
    (ev) -> $(this).removeClass 'active' 
) 

o incluso mejor, utilizando toggleClass()

$('.element').hover (ev) -> $(this).toggleClass 'active' 
+1

lo usamos originalmente toggleClass pero si me cernía sobre este elemento al cargar la página, el elemento comenzarían como activo, luego al pasar el mouse, alternar a inactivo y así sucesivamente. –

+0

¿Qué es 'ev' aquí? – emaillenin

+0

@emaillenin El objeto de evento, vea http://api.jquery.com/hover/ – Niko

-4
$('.element').on 'hover', (ev) -> 
    $(this).addClass('active').removeClass('active') 

debería hacerlo. Aunque no lo entiendo Agregando la clase active y luego quitándola. Sin embargo, el código anterior es coffeescript válido al menos.

1

función activar de jQuery tiene dos funciones, que creo que es lo que está buscando:

$('.element').toggle 'hover', 
    (ev) -> 
     $(this).addClass('active') 
     # Do other stuff... 
    (ev) -> 
     $(this).removeClass('active') 
     # Do other stuff...