Проблема с jQuery Mouseenter / Mouseleave в Firefox - PullRequest
3 голосов
/ 29 января 2010

У меня проблема с событиями mosueenter / mouseleave только в Firefox ...

http://www.screencast.com/users/StanleyGoldman/folders/Jing/media/be3572de-9c72-4e2a-8ead-6d29b0764709

<HTML>
    <HEAD>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.js"></script>
        <script>
            $(document).ready(function() {
                $("#theDiv").mouseenter(function() {
                    $("#output").append('mouseenter<br>'); 
                });
                $("#theDiv").mouseleave(function() {
                    $("#output").append('mouseleave<br>');
                });
            });

        </script>
    </HEAD>
    <BODY>

    <div id="theDiv" style="position:relative; height: 300px; width:300px; background-color:Black;">
        <input type="text" style="position:absolute; top: 40px;" />

        <div style="position:absolute; top:100px; height:100px; width:100px; background-color:Red; overflow:auto;">
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        <p>Content</p>
        </div>
    </div>

    <div id="output"></div>

    </BODY>
</HTML>

Я хочу знать только, когда мышь покинуласодержащий DIV.Но если вы либо очень быстро наведете указатель мыши на текстовое поле, либо наведете указатель мыши на полосу прокрутки элемента div, события начнутся.следуя за парениемКажется, он страдает от той же проблемы только в Firefox.

Ответы [ 2 ]

2 голосов
/ 29 января 2010

Это поведение связано с ошибкой firefox , которая была исправлена ​​в Firefox 3.6. jQuery пытается обработать эту ошибку с помощью функции WithinElement (поиск по исходному коду jQuery), но решение не является идеальным.

2 голосов
/ 29 января 2010

Я почти всегда нахожу, что лучше использовать метод hover () или плагин hoverIntent () , а не отдельные обработчики mouseenter / mouseleave, если вы планируете выполнять как когда мышь входит и покидает элемент. Кажется, что оба они обрабатывают диапазон возможных событий движения мыши, а не просто отображают на mouseenter / mouseleave.

...