2011-01-06 55 views
3

jQuery emulates IE's mouseenter event在非IE瀏覽器上。然而,在IE中,當頁面加載時可能會觸發mouseenter(可能是由於jQuery在$.ready實現中使用doScroll),即使鼠標根本沒有移動。是否可以讓mouseenter在DOMready的IE中無法啓動?

這不會在其他瀏覽器中發生的,絕對不遵循Microsoft's own spec,它說(重點煤礦):只有

該事件觸發如果鼠標指針的對象和邊界之外用戶移動到對象邊界內的鼠標指針。如果鼠標指針當前位於對象的邊界內,則要觸發事件,用戶必須將鼠標指針移動到對象邊界之外,然後再移回到對象的邊界內。在IE中的mouseenter將$.ready後立即開火,模糊:

如果懸停(或hoverIntent插件)應用於導航項下顯示下拉或「大菜單」這隻能成爲可用性的問題帶菜單的內容。

+0

也一直在尋找這個答案。 – 2011-01-06 18:47:11

回答

1

我找到了一個工作的解決方案:不要在以後的線程綁定:

jQuery(function ($) { 
    setTimeout(function() { 
     /* bind with hoverIntent */ 
    }, 0); 
}); 

在過去,這已經固定,許多IE問題對我來說(表單元素沒有準備好),jQuery應該把它燒到$.ready

3

你可以做結合第一mousemove事件,而不是在DOM準備:

$(document).ready(function() { 
    $(this).one('mousemove', function() { // only on the first time the mouse is moved 
     $('#yourMenu').mouseenter(function() { // bind the mouseenter code 
      // your code 
     }); 
    }); 
}); 

這是一個小哈克,但我認爲它應該工作。


我喜歡使用setTimeout的解決方案。另一種解決方案可以是做$(window).load()的結合,而不是:

$(window).load(function(){ 
    $('#yourMenu').mouseenter(function() { // bind the mouseenter code 
     // your code 
    }); 
}); 
+0

請參閱「已添加」註釋。 mousemove會在我附加到的每個元素上的$ .ready()上被觸發。 – 2011-01-06 22:16:26

相關問題