2010-11-26 22 views
6

¿Puedo pasar una variable en hover()?jquery: pasar variables en la función hover()?

Como en el script a continuación, no deseo declarar la misma variable dos veces var target = xxx y no quiero hacer que esta variable sea global target = xxx bcos Tengo otra función usando este nombre de variable - destino.

$('.image-profile').hover(function() { 

     var target = $('.button-change-image-profile',this); 
     target.show(); 

    },function() { 

     //var target = $('.button-change-image-profile',this); 
     target.hide(); 

    }); 

así que traté de pasar el var como esto },function (target) {, por supuesto que es un error, pero cualquier otro método de pasar esta var?

gracias.

+0

¿De qué sirve pasar el argumento a los eventos tipo de función, lo que sea que quiera estará disponible a través de eventos o esto ... – kobe

Respuesta

6

La versión corta es sólo para alternar aquí:

$('.image-profile').hover(function() { 
    $('.button-change-image-profile',this).toggle(); 
}); 

tenerlo disponible en cada controlador (como una solución más general) lo definen exterior cuando bucle (usando .each() por ejemplo), así:

$('.image-profile').each(function() { 
    var target = $('.button-change-image-profile',this); 
    $(this).hover(function() { 
     target.show(); 
    },function() { 
     target.hide(); 
    }); 
}); 
+0

muchas gracias! ¿Por qué no pensé en eso? gracias por la ayuda :-) – laukok

+0

Gracias por la respuesta general! Me ayudó a salir – Jeff

1

Simplemente defina la función var out of hover.

+0

en javaScript cada variable definida fuera de función es algún tipo de global. – slobodan

+3

No sé quién le dijo eso, pero eso no es correcto. –

+0

Esta es una muy mala manera de "resolver" el problema, y ​​de hecho podría causar problemas aquí, ya que es probable que haya muchos elementos '.image-profile'. –

1

Creo que jQuery bind podría ser lo que usted desea.

7

Otro posible enfoque: para guardar datos en el this de la acción de desplazamiento dentro/fuera usando jQuery .data(). Lo guarda con el mouse, lo recupera con el mouse. Esto puede ser conceptualmente similar a usar un var global o un var a cabo la función de vuelo estacionario, por lo tanto, t puede crear un poco de basura ...

$('.image-profile').hover(function() { 

    var target = $('.button-change-image-profile',this); 
    target.show(); 

    // we save the target object into the 'target' key. 
    $(this).data('target',target); 

},function() { 

    // we retrieve the target object (a jQuery object) and then hide it. 
    $(this).data('target').hide(); 

}); 

Con suerte, este enfoque no es demasiado malo ...

+0

esto resolvió el problema para mí, ¡muchas gracias! – Saturnix

+0

Funcionó bien para mí :) – Heihachi

Cuestiones relacionadas