2012-01-13 78 views
0

我已經閱讀了類似主題上的貼子數量,所有這些都很出色,我學到了很多閱讀它們,但是仍然無法令我的代碼工作令人滿意。JavaScript - 防止鼠標懸停的孩子,當孩子創建動態的孩子

我有一個菜單欄和一些按鈕。當我將鼠標懸停在其中的某個JavaScript上時,會爲每個按鈕動態創建一個下拉菜單。

當我將鼠標移出按鈕或完全離開菜單欄時,我清除了下拉菜單。

很顯然,當我將鼠標懸停在下拉菜單上時,我不希望此下拉列表被清除。

但當然事件發生並清除這個菜單。

我可以看到用於類似問題的各種方法。但是,這些工作都沒有奏效,我認爲它是由於當聽衆被分配給父母時顯然不存在的div和dl創建的結果。因此,雖然添加到dom中的html將下拉列表放在偵聽器的範圍內,但它仍假定發生了鼠標事件。

我試圖通過添加成功添加動態內容的偵聽器進行更正,但仍然無法防止mouseout在鼠標懸停前觸發。

回答

0

設置一個計時器,並在鼠標懸停在生成的菜單上清除它。

document.getElementById("menu").onmouseout = function(e){ 
    window.to = setTimeout(function(){ 
     // remove the submenu 
    },20) 
} 

document.getElementById("submenu").onmouseover = function(e){ 
    clearInterval(window.to) 
} 
+0

嗨伊萬,現在我已經嘗試應用setTimeout。我將它設置在mouseout外的主菜單按鈕上,並設置了在清除菜單之前測試過的dropDownFocus標誌。 – codepuppy 2012-01-14 07:17:32

+0

應該是'window.to = window.setTimeout(...'。無論如何,這對我有效。 – tjb1982 2012-03-20 15:01:45