3

jQueryは、IE 以外のブラウザーでIE の mouseenter イベントをエミュレートします。ただし、IE では、マウスがまったく動かされていなくても、ページの読み込み時に mouseenter がトリガーされます (実装doScrollでの jQuery の使用による可能性があります)。$.ready

これは他のブラウザーでは発生せず、間違いなくMicrosoft 独自の仕様に従っていません (私の強調):

このイベントは、マウス ポインターがオブジェクトの境界の外側にあり、ユーザーマウス ポインターをオブジェクトの境界の内側に移動した場合にのみ発生します。マウス ポインターが現在オブジェクトの境界内にある場合、イベントを発生させるには、ユーザーはマウス ポインターをオブジェクトの境界の外に移動してから、オブジェクトの境界内に戻す必要があります。

これは、ナビゲーション項目にホバー (または hoverIntent プラグイン) を適用してドロップダウンまたは「メガメニュー」を表示する場合にのみ、使いやすさの問題になり$.readyます。

4

2 に答える 2

3

DOM 準備完了ではなく、最初の mousemove イベントでバインディングを行うことができます。

$(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ます。別の解決策の 1 つは、代わりにバインディングを実行することです$(window).load()

$(window).load(function(){
    $('#yourMenu').mouseenter(function() { // bind the mouseenter code
        // your code
    });
});
于 2011-01-06T19:06:37.577 に答える
1

私は1つの実用的な解決策を見つけました:後のスレッドでバインディングを行います:

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

過去に、これにより非常に多くの IE の問題 (フォーム要素の準備ができていない) が修正されたため、jQuery は$.ready.

于 2011-01-06T22:30:30.997 に答える