2011-11-29 15 views
8

Tengo un div con una identificación de "botón". Estoy intentando cambiar su fondo para que se vuelva azul cuando coloque el cursor (sin usar el selector de desplazamiento CSS).Javascript addEventListener: ¿usar para crear un efecto de mouseover?

var item = document.getElementById("button"); 
item.addEventListener("mouseover", func, false); 

function func() 
{ 
    var item = document.getElementById("button"); 
    item.setAttribute("style", "background-color:blue;") 
} 

Esto, sin embargo, sólo se establece el color del elemento a azul cuando se ciernen, pero no se reinicia a blanco después de mover el ratón de distancia. ¿Cómo puedo corregir esto? (por cierto, mouseenter y mouseleave no funcionan con esto aparentemente).

Respuesta

13

Tendrá que configurar un evento similar para manejar mouseout. Dentro de la función de evento mouseout, puede cambiar el color al color original.

var item = document.getElementById("button"); 
item.addEventListener("mouseover", func, false); 
item.addEventListener("mouseout", func1, false); 

function func() 
{ // not needed since item is already global, 
    // I am assuming this is here just because it's sample code? 
    // var item = document.getElementById("button"); 
    item.setAttribute("style", "background-color:blue;") 
} 

function func1() 
{ 
    item.setAttribute("style", "background-color:green;") 
} 
+0

Ahh ... ¡genial! Tengo una imagen dentro de mi div y lo considera como "fuera", ¿hay alguna forma de enmascarar eso para que todavía piense que está dentro de la caja? – antonpug

+0

Sí, los eventos mouseover y mouseout también captan todos los eventos de los niños (y aparecen). En sus funciones, tendrá que comparar la propiedad relacionada Destino (W3C) o Destino/Destino (IE) en el parámetro de evento. Eche un vistazo a este enlace para obtener más información: http://www.quirksmode.org/js/events_mouse.html#relatedtarget – AndrewR

+0

Es mucho trabajo capturar solo el contenedor primario y no manejar nada desde elementos secundarios. A menos que tenga alguna razón específica para no hacerlo, podría simplificar su código utilizando la función 'hover()' de jQuery. – AndrewR

1

¿Has probado mouseout?

(Desafortunadamente, el evento "mouseover" recibió un nombre poco apropiado: hubiera sido mejor si se lo hubiera llamado "mousein", por lo que fue más obvio e intuitivo que "mouseout". Pero ese es solo uno de muchos cosas inconsistentes del evento.)

Creo que mouseenter y mouseleave son elementos de IE que otros navegadores pueden no admitir, aunque creo que jQuery también admite esos eventos.

+0

mouseout funciona ... pero ¿hay algo así como mousein? mousein no funciona – antonpug

+0

No, no, no hay "mousein". Los dos eventos son definitivamente "mouseover" y "mouseout". Lo que quise decir es que el evento "mouseover" existente debería haberse llamado "mousein", por lo que era un opuesto más obvio que "mouseout". Pero no fue así. He editado mi respuesta para tratar de aclararlo un poco. – nnnnnn

Cuestiones relacionadas