0

だからここに私のコードがあります:

   var timeouts = {};
    $('#nav ul > li').mouseenter(function() {
        clearTimeout(timeouts['menu']);
        $(this).find('div.dropdown').stop(true).slideDown(200);
    });
    $('#nav ul > li').mouseleave(function() {
        timeouts['menu'] = setTimeout(function() {
            $(this).find('div.dropdown').stop(true).slideUp(200);
        }, 1000)
    });

これは機能していないようです。何か案が?私の目標を達成する他の方法はありますか?マウスをホバーするとコードが機能するようになりましたが、マウスを離してもdivがスライドしません。

4

2 に答える 2

0

匿名関数の内部でthisは、おそらく HTML 要素として定義されていません。

this適切なスコープに入れてください:

var timeouts = {'menu': false};

$('#nav ul > li').hover(function() {
    if (timeouts['menu'] !== false) {
      clearTimeout(timeouts['menu']);
    }

    $(this).find('div.dropdown').stop(true).slideDown(200);
}, function() {
    var $this = $(this);

    timeouts['menu'] = setTimeout(function() {
        $this.find('div.dropdown').stop(true).slideUp(200);
    }, 1000)
});

timeouts['menu']また、最初に定義せずに呼び出そうとすると、おそらくエラーが発生します。デフォルト値に設定し、使用する前に存在するかどうかを確認します。

于 2012-06-20T03:16:40.253 に答える
0

hoverIntentプラグインを試すか、ここでいくつかのソリューションを確認してください: jQuery if mouse over for 2 sec. アニメーションを開始するか、まったくアニメーションしない

于 2012-06-20T03:25:42.243 に答える