2011-11-29 17 views
8

Mam element div z identyfikatorem "przycisku". Próbuję zmienić jego tło, aby stał się niebieski po najechaniu kursorem (bez użycia selektora hover CSS).JavaScript addEventListener - za pomocą, aby utworzyć efekt mouseover?

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

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

To jednak tylko ustawia kolor elementu na niebiesko, gdy unoszą się, ale nie przywrócić go do białego po poruszam myszką z dala. Jak mogę to poprawić? (btw, mouseenter i mouseleave nie działają z tym pozornie).

Odpowiedz

13

Musisz konfiguracji podobną imprezę obsługiwać mouseout. Wewnątrz funkcji zdarzenia mouseout możesz zmienić kolor z powrotem na kolor oryginalny.

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 ... świetnie! Mam obraz wewnątrz mojego div i uważa, że ​​jako "na zewnątrz", jakikolwiek sposób, aby to zamaskować, więc wciąż myśli, że jest w pudełku? – antonpug

+0

Tak, zdarzenia "mouseover" i "mouseout" wychwytują wszystkie zdarzenia również od dzieci (i spiskują). W swoich funkcjach będziesz musiał porównać właściwości relatedTarget (W3C) lub ToTarget/fromTarget (IE) w parametrze zdarzenia. Spójrz na ten link, aby uzyskać więcej informacji: http://www.quirksmode.org/js/events_mouse.html#relatedtarget – AndrewR

+0

To dużo pracy, aby uchwycić tylko nadrzędnego kontenera i nie obsługiwać nic z elementów podrzędnych. Jeśli nie masz konkretnego powodu, nie możesz uprościć swojego kodu, używając funkcji 'hover()' jQuery. – AndrewR

1

Czy próbowałeś już mouseout?

(Niestety zdarzenie "mouseover" zostało źle nazwane - byłoby lepiej, gdyby zostało nazwane "mousein", więc było to bardziej oczywiste i intuicyjne przeciwieństwo "mouseout" .Ale to tylko jeden z wielu . niespójne rzeczy event)

myślę mouseenter i mouseLeave IE są rzeczy, które inne przeglądarki nie obsługują - choć myślę jQuery obsługuje te zdarzenia też.

+0

mouseout działa ... ale czy jest też coś takiego jak mousein? mousein nie działa – antonpug

+0

Nie, nie, nie ma "mousein". Te dwa wydarzenia to zdecydowanie "mouseover" i "mouseout". Miałem na myśli to, że istniejące "mouseover" wydarzenie powinno zostać nazwane "mousein", tak aby było bardziej oczywistym przeciwieństwem "mouseout". Ale tak nie było. Zmieniłem moją odpowiedź, aby spróbować uczynić to nieco jaśniejszym. – nnnnnn

Powiązane problemy