2010-07-29 73 views
12

我有很多李項的UI元素:使用委託()與懸停()?

<ul> 
    <li></li> 
    ... 
</ul> 

當用戶在li元素懸停他們的鼠標,我想展示黎族一些隱藏的按鈕,當他們停止徘徊,隱藏按鈕再次。試圖使用代理人:

$("#myList").delegate("li", "hover", function() { 
    if (iAmHovered()) { 
     showButtons(); 
    } else { 
     hideButtons(); 
    } 
}); 

上述內容被稱爲懸停和'un-hover'。我怎樣才能區分是否是假或進入?

另外,我得到了這個問題,這個樣本: .delegate equivalent of an existing .hover method in jQuery 1.4.2

其中尼克說:

這取決於[#myList]沒有得到通過AJAX更換或以其他方式雖然,因爲這就是事件處理程序的生命。

我雖然更換#myList的內容,使用:

$("#myList").empty(); 

將導致一個問題?

感謝

回答

19

你需要測試事件的類型,就像這樣:

$("#myList").delegate("li", "hover", function (event) { 
    if (event.type == 'mouseover') { 
     showButtons(); 
    } else { 
     hideButtons(); 
    } 
}); 

由於只有一個處理器爲兩個事件運行,我們正在檢查,看看哪一個發射和運行適當的碼。

而不是綁定hover直接到它能夠接受兩個事件類型的兩個處理程序的元素。


編輯:注意,作爲jQuery 1.4.3,即使用與'hover'.delegate().live()報告的事件的類型是不再mouseover/mouseout(如它應該是)。現在這將是mouseenter/mouseleave,這似乎很愚蠢,因爲他們是非冒泡的事件。

所以if()聲明會是什麼樣子:即工作

if (event.type == 'mouseenter') { 
    //... 
+0

酷感謝。 – user246114 2010-07-30 00:05:52

0

可以聲明處理函數,以便它注重事件參數,然後檢查類型。