2011-01-06 3 views
3

jQuery emulates IE's mouseenter event (IE가 아닌 브라우저의 경우) 그러나 IE에서, 마우스가 전혀 움직이지 않더라도 페이지가로드 될 때 mouseenter가 트리거됩니다 ($.ready 구현에서 doScroll의 jQuery 사용 때문일 수 있음).DOMenter에서 IE를 실행하지 못하게 할 수 있습니까?

이 (강조 광산)라고하는 Microsoft's own spec을 따르지 않는 확실히 다른 브라우저에서 발생하지 않습니다

이벤트가 발생에서만 마우스 포인터가 객체와의 경계를 벗어나면 사용자 마우스 포인터를 개체의 경계 내부로 이동합니다. 마우스 포인터가 현재 개체의 경계 내에있는 경우 이벤트가 발생하려면 사용자가 마우스 포인터를 개체의 경계 밖으로 이동 한 다음 개체의 경계 안으로 다시 이동해야합니다. IE에서, mouseenter는 $.ready 후 즉시 실행됩니다, 어둡게 : 호버 (또는 hoverIntent 플러그인) "메가 메뉴"드롭 다운을 표시하거나하는 탐색 항목에 적용되는 경우

이는 유용성의 문제가된다 메뉴의 내용 그것은 약간의 해키

$(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 
     }); 
    }); 
}); 

,하지만 난이 일을해야한다고 생각 :

+0

이 답변도 찾고 있습니다. –

답변

1

내가 한 작업 해결책을 발견 : 과거

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

이 그렇게 수정 한 다음 나중에 스레드에서 바인딩을 수행 jQuery가 $.ready으로 구워 져야한다는 많은 IE 문제 (양식 요소가 준비되지 않음).

3

당신은 오히려 준비 DOM보다는, 첫 번째에서 mousemove 이벤트에 바인딩 할 수 있습니다.


나는 setTimeout을 사용하는 솔루션을 좋아한다. 또 다른 솔루션 대신 $(window).load()에 바인딩을 수행 할 수 있습니다 :

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

"추가됨"참고 사항을 참조하십시오. mousemove는 내가 첨부 한 모든 요소에 $ .ready()를 실행합니다. –

+0

'$ (window) .load (function() {...});'나를 위해 일했다. – seangates