3

Firefoxでのみmosueenter/mouseleaveイベントに問題があります...

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のスクロールバー上で移動すると、イベントが発生します。

- 編集 -

$("#theDiv").hover(function() {
    $("#output").append('hoverin<br>');
}, function() {
    $("#output").append('hoverout<br>');
});

ホバーで以下を試してみました。Firefoxでのみ同じ問題が発生するようです。

4

2 に答える 2

2

マウスが要素に出入りするときの両方で何かを行うことを計画している場合は、ほとんどの場合、mouseenter / mouseleaveハンドラーを分離するよりも、hover( メソッドまたはhoverIntent()プラグインを使用する方がよいと思います。これらは両方とも、単にmouseenter / mouseleaveにマッピングするのではなく、起こりうるさまざまなマウス移動イベントを処理しているようです。

于 2010-01-28T22:04:39.230 に答える
2

この動作は、Firefox3.6で修正されたfirefoxのバグに関連しています。jQueryはwithinElement関数(jQueryソースコードを検索)を使用してこのバグを処理しようとしますが、解決策は完全ではありません。

于 2010-01-28T22:39:53.850 に答える