2010-10-28 55 views
0

我想使用jquery創建一個下拉菜單,但即使它不應該關閉。setInterval/clearInterval下拉問題

我有一個訂閱了mouseenter事件的元素,鼠標進入元素,下拉菜單,啓動,一切似乎都沒問題。我下載到包含一些內容的列表元素的項目列表。我第一次改變這兩個元素,一切都按預期工作。所以我離開元素的鼠標事件被稱爲和在1000毫秒內列表不再可見。 第二次我打開「下拉菜單」似乎沒問題,但是如果我檢查列表,它會在我離開元素時消失。有些方式是合乎邏輯的,因爲每個元素(按鈕和列表)都訂閱了兩個事件:mouseenter和mouseleave。 Mouseenter提供了一個clearInterval,mouseout提供了一個setInterval。數據存儲在一個名爲tTimer的變量中,默認值爲0. 我真的不知道爲什麼會發生這種情況。繼承人從我的代碼snipplet:

 var tTimer = 0; 
     var rmItemList = function(){itemList.remove(); clearTimeout(tTimer); } 

     $(this).bind("mouseleave",function(){ tTimer = window.setTimeout(rmItemList, 1000); }); 
     itemList.bind("mouseleave",function(){ tTimer = window.setTimeout(rmItemList, 1000); }); 
     $(this).bind("mouseenter",function(){ window.clearTimeout(tTimer); itemList.appendTo("body"); }); 
     itemList.bind("mouseenter",function(){ window.clearTimeout(tTimer); }); 
+0

您已經詳細描述了該場景,但是您是否仍然可以在http://jsfiddle.net上進行最小化演示? – Thomas 2010-10-28 09:21:08

回答

1

我發現它有點棘手,想象你在做什麼。然而,我看到你反覆添加和刪除DOM中的元素。我相信.remove()會從元素中移除事件處理程序。取而代之,使用.show().hide()可能會更好。

這將有更多改進性能的額外優勢。

+0

是的,那是問題:)謝謝! – 2010-10-28 10:49:14