2012-05-10 50 views
0

看起來.izberiLokacija類中的onmouseout事件正在由<li>中的onmouseout事件觸發。這是JavaScript的工作方式,或者我做錯了什麼。如果是這樣的話,請提出一個可能的解決方案留下的div本身,只有當以激活.izberiLokacija類onmouseout事件......javascript觸發器中的onmouseout事件

<div class="izberiLokacija" onmouseout="alert('asd');toggleDivZaMalaMapa(2);"> 
      <ul> 
        <li onmouseover="toggleDivZaMalaMapa(1);">li1</li> 
        <li onmouseover="toggleDivZaMalaMapa(1);" style="border-top: solid 2px #00699B"> li2 </li> 
      </ul> 
</div> 

回答

0

這是JavaScript的工作方式。或者在每個<li>上放置一個處理程序以防止冒泡(使用event.stopPropagation()或返回false),或者測試event.target是否是您希望它在您的.izberiLokacija處理程序中。閱讀關於事件冒泡的更多信息,這應該可以消除混淆。

另一種方法是用onmouseleave/onmouseenter替換onmouseout/onmouseover。他們幾乎是同一個事件,但後者不會冒泡。

題外話:你會如果從alertconsole.log移動更快樂;另外,內聯JavaScript很難處理;考慮分離你的JS和HTML。

+0

和'OnMouseLeave在/ onmouseenter'是所有瀏覽器沒有標準,只是在IE中,如果您不是在討論jQuery鼠標事件。 – ocanal

+0

感謝您的提示,我確實使用separete .js文件... 編輯: 現在我明白你的意思後,閱讀第二條評論,很好... – korun

+0

@ocanal:其實,目前它的火狐,歌劇和IE瀏覽器。在Webkit上不起作用。但是,是的,我想應該在進入/離開時使用圖書館。 – Amadan

0

您將鼠標懸停在一個元素每當......的「懸停」事件將觸發。事件也會冒泡DOM樹併爲其父母的每一個人...一直到身體標籤。

請不要指定事件直列......它使難以維護的代碼和臃腫的非語義標記。

相反,試試這個(使用jQuery ......因爲每個人都使用jQuery的,對吧?)

http://jsfiddle.net/ryanwheale/fab8Z/

+0

感謝您的美好預覽... – korun