今天在幫別人解決一個關於mouseover和mouseout問題的時候發現了一個原來沒想到的問題,鬥膽share下,高手莫噴。 。
問題:有巢狀的三層div。 div111最外層,div222中間層,div333最內層。
效果:當滑鼠位於div的上方時,對應層的mouseover觸發,當屬性從div的上方離開時,對應層的mouseout觸發。 (例如:當滑鼠從div111移動到子元素div222,div333時,不會觸發div111的mouseleave事件,反過來當從子元素div222,div333到div111時,不會觸發div111的mouseenter事件,
此段程式碼同時也解決了mouseover和mouseout因為子元素的冒泡而產生的一些問題。
一個叫做mouseleave
mouseenter和mouseleave這兩東西完全做不到這種效果好吧。
#切,我還以為是什麼大問題,直接綁定一次事件就可以,使用e.target就可以進行判斷具體發生在哪個元素上,根據元素來處理更節省資源。 # mouseover/out是冒泡的,所以自然會引起這問題
其他瀏覽器下用addEventListener註冊的時候第3個參數傳true就行
IE的mouseenter/leave,當滑鼠從div111移動到div222的時候,會觸發div111的mouseleave和div222的mouseenter,反過來從div222到div111的時候,會觸發div222的mouseleave和div111的mouseenter,完全就不符合要求,他們只適合沒有巢狀的應用。要解決這個問題才產生的。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> <style> #div111{ width:200px; height :200px ; background :red; margin :100px auto auto 100px; border: 2px solid white; } #div222{ width:100px; height :100px; background :yellow; border: 2px solid white; } #div333{ width:50px; height :50px; background :blue; border: 2px solid white; } </style> </head> <body> <div id="div111"> <div id="div222"> <div id="div333"></div> </div> </div> <div id="log"></div> <script type ="text/javascript" > function mouse_over(event){ var elem = $(event.currentTarget), fromElem = $(event.relatedTarget); if(elem.has(fromElem).length === 0 || !fromElem.is(elem)){ elem.css('border-color', 'green'); log(elem.attr('id'), event.type); } }; function mouse_out(event){ var elem = $(event.currentTarget), toElem = $(event.relatedTarget); if(elem.has(toElem).length === 0 || !toElem.is(elem)){ elem.css('border-color', 'white'); log(elem.attr('id'), event.type); } }; function log(id, type){ $("#log").append("<div><span>" + id + "触发了<strong><font color='red'>" + type + "</font></strong>事件</span></div>"); } $('#div111').mouseover(mouse_over); $('#div222').mouseover(mouse_over); $('#div333').mouseover(mouse_over); $('#div111').mouseout(mouse_out); $('#div222').mouseout(mouse_out); $('#div333').mouseout(mouse_out); </script> </body> </html>
$().mouseenter(function(){ //do something });
以上是jQuery嵌套元素的mouseover和mouseout事件詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!