2013-02-26 127 views
5

我一直在使用以下代碼片段來確定Chrome/Safari & FF是否有用戶懸停在錨點上。jQuery爲什麼:懸停只能工作一次?

var isURL = $("a", obj).is(":hover"); 

我見過不同的崗位約:懸停是一個CSS選擇器,但我不能讓我的周圍頭就是爲什麼代碼返回如果有內OBJ 1頁的鏈接,但拋出一個的javascript無法識別的表情懸停如果有2個或更多錯誤。

這裏是一個小提琴:懸停工作: - http://jsfiddle.net/2kyaJ/122/

相同,但多元素(不工作): - http://jsfiddle.net/2kyaJ/121/

任何人都可以給我講解一下?

當我看到這個問題的方法... How do I check if the mouse is over an element in jQuery?

4年是這樣仍然是最好的,看似方法來確定用戶是否懸停在一個元素?如果是的話,任何人都可以提供一個例子嗎?

編輯:不得不去釣魚我所需要的,但事實證明這很簡單,因爲它是非常好的作品。

我目前在jQuery 1.9.1插件中使用它,我在父元素(obj)的mouseover上觸發動畫。希望其他人在未來發現它有用。使用.length而不是.size作爲.size從版本1.8開始已棄用。

 function isMouseOver() { 
      if ($('a:hover', obj).length != 0) { 
       return true; 
      } else { 
       return false; 
      }       
     } 

用法:

var isURL = isMouseOver(); 
+0

因爲要使您的邏輯工作,* all *'.sample'元素必須同時進行徘徊。你需要檢查哪個元素(如果有的話)單獨懸停以達到你想要的效果。 – BenM 2013-02-26 01:26:45

+1

@BenM,如果這是真的,那麼[文檔](http://api.jquery.com/is/)是錯誤的:「根據選擇器,元素或jQuery對象檢查當前匹配的元素集並返回'如果**這些元素中的至少一個**匹配給定的參數,則爲true。「 – redbmk 2013-02-26 01:32:04

+0

好吧,檢查你的控制檯。 Sizzle不支持包含多個元素的jQuery對象的'懸停':未捕獲的錯誤:語法錯誤,無法識別的表達式:懸停。 – BenM 2013-02-26 01:34:16

回答

5

:hover沒有記錄在http://api.jquery.com/ - 因此我不會相信它以任何特定方式工作。問題似乎是,當集合中有多個元素需要迭代時,Sizzle會被這個僞選擇器弄糊塗,儘管我不能通過查看代碼來告訴乳清。

,它甚至在你的第一個例子中的工作似乎是一個錯誤的事實:http://jsfiddle.net/2kyaJ/122/ - 它不使用jQuery 1.9

工作,至於如何判斷一個元素盤旋 - 我不知道你需要什麼情況下做到這一點。相反,當觸發懸停時最好採取行動。您可以使用mouseovermouseenter綁定到「懸停狀」事件。當然,還有CSS僞選擇器:hover

+0

我正在編寫一個插件,當您將鼠標懸停在某個元素上時,它會向左滑動以顯示隱藏在右側的內容,如果用戶懸停在鏈接上,則會在幻燈片上滑回原始位置,我不希望以觸​​發動畫,但我已經使用setTimeout在mouseout上等待250毫秒,在鼠標懸停上等待1.5秒。 – KryptoniteDove 2013-02-26 01:50:17

3

試試這個小提琴http://jsfiddle.net/2rU4U/

setInterval(function(){ 
    var $sample = $(".sample"); 

    $sample.each(function(index) { 
     if($(this).is(":hover")) { 
      $(this).css("background", "yellow"); 
     } 
     else { 
      $(this).css("background", ""); 
     } 
    }); 
}, 200); 

如上評論中提及,這個尊重是元素的集合可能是,不只是返回的事實一個。當然可能會導致很多元素的開銷...!

+0

謝謝,我真的用小提琴作爲行爲的例證。看起來問題的第一部分已經被回答爲「不被支持的僞」,但是有誰知道確定我是否在元素上盤旋的最佳方式?還是上面的鼠標懸停要淡出還是要走? – KryptoniteDove 2013-02-26 01:41:46

-2

老實說,設定的時間間隔是一個可怕的想法...

只需設置一個懸停監聽器。

$('.sample').hover(function() { 
    console.log($this) // $(this) is the currently hovered element 
}) 

的jsfiddle:http://jsfiddle.net/jeffshaver/2kyaJ/124/

+0

這並不回答這個問題,它改變了.sample類到黃色的所有元素。我想確定是什麼元素被盤旋。小提琴只是一個行爲的例子。 – KryptoniteDove 2013-02-26 13:04:47

+0

好吧,如果你正在試圖找出其中「樣品」正在徘徊,然後就做$(本)的東西懸停監聽器裏......它仍然工程...即 $(「樣品」 ).hover(function(){console.log($(this)); }); 返回是徘徊 – 2013-02-26 13:35:03

+0

html元素http://jsfiddle.net/jeffshaver/2kyaJ/124/ – 2013-02-26 13:41:33

1

至於爲什麼它不工作的方式,我會說,這可能是一個錯誤,也可能是它的無證。我不知道。

然而,這裏是在jQuery的1.7.1,1.9工作的例子,並2.0.0b1: http://jsfiddle.net/2kyaJ/125/

基本上而不是使用.is()可以查詢所有徘徊的元素,然後檢查是否有至少一場比賽($(".sample:hover").length而不是$(".sample").is(":hover"))。

我有一個印象,你想突出顯示所有.sample元素,當他們任何一個被徘徊,因此第一個jsfiddle。不過,如果你只是想突出懸停元素,你可以嘗試這樣的事: http://jsfiddle.net/2kyaJ/126/

此外,如果你只是看的東西結合到懸停事件,而不是檢查更多或每0.2秒的時間您可以使用.hover()函數: http://jsfiddle.net/2kyaJ/127/

相關問題