2011-11-29 6 views
8

私は "ボタン"のIDを持つdivがあります。私は(CSSのホバーセレクターを使用せずに)ホバリングするとその背景が青くなるように変更しようとしています。Javascript addEventListener - マウスオーバー効果を作成するために使用しますか?

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

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

これは、しかし、唯一私が置くと青にアイテムの色を設定しますが、私は離れてマウスを移動した後、白にリセットされません。どうすれば修正できますか? (btw、mouseenterとmouseleaveはこれと一見してうまくいかない)。

答えて

13

mouseoutを処理する同様のイベントを設定する必要があります。 mouseoutイベント関数の中で、色を元の色に戻すことができます。

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

ああ...素晴らしい!私は自分のdivの中にイメージを持っていて、それは "外に"それをマスクする方法はまだそれがボックス内だと思うように考えていますか? – antonpug

+0

はい、mouseoverイベントとmouseoutイベントは子供からのすべてのイベントをキャッチします(そして、それらはバブルアップします)。関数では、イベントパラメーターのrelatedTarget(W3C)またはtoTarget/fromTarget(IE)プロパティーを比較する必要があります。詳細はこのリンクをご覧ください:http://www.quirksmode.org/js/events_mouse.html#relatedtarget – AndrewR

+0

親コンテナだけをキャプチャし、子要素から何も処理しないことはたくさんあります。そうでない特別な理由がない限り、jQueryの 'hover()'関数を使ってコードを単純化することができます。 – AndrewR

1

mouseoutを試しましたか?

(残念ながら、イベント「mouseover」の名前が正しくない - 「mouseinin」と呼ばれていた方が、明らかに直感的に「mouseout」の反対であった方が良いでしょう。一貫性のないイベントのもの)

私はmouseenterとmouseleaveは他のブラウザでサポートされていないIEのことだと思いますが、jQueryもこれらのイベントをサポートしていると思います。

+0

mouseout works ...でもmouseinのようなものがありますか?マウスが動かない – antonpug

+0

いいえ、いいえ、「mousein」はありません。 2つのイベントは間違いなく "mouseover"と "mouseout"です。私が意味していたのは、既存の「mouseover」イベントが「mousein」と呼ばれ、「mouseout」とは明らかに反対であったはずでした。しかし、そうではありませんでした。私は少し明確にしようと私の答えを編集しました。 – nnnnnn

関連する問題