1

最初のレベルのメニュー エントリが li 要素で、2 番目のレベルが独自の li 要素を持つ ul ブロッ​​クである単純なメニューを作成しようとしています。本当に明るいものはありません。CSS が含まれていますdisplay: noneすべてのサブメニューと私の (楽観的な) アイデアは、SUBmenu (ul 要素) で mouseout が発生したときにそれらを非表示にするよりも、最初のレベルのエントリで mouseover が発生したときに適切な ul 要素を表示することでした。何が起こったのか理解するのに問題があります。Firefox ではすべて問題なく、アクション シーケンス: 最初のレベルのメニューに入る - サブメニューに入る - サブメニューから出る は、適切なイベント シーケンスがトリガーされることを示しています: menuOn subMenuOn subMenuOff menuOff。IE で同じイベント シーケンスで subMenuOff が subMenuOn の後に突然トリガーされる理由がわかりません。その結果、サブメニューがすぐに消えます。サブメニューを無効にすると同時に、カップル (subMenuOn subMenuOff) がトリガーされたようなものです。mouseover または mouseenter を使用しても変更はありません。ホバーを使用しても状況は変わりません。何が起こったのか少し考えていますか?

$(document).ready(
    function () {
        enableMenu();
    }
);

var flagOnSubMenu = false;

function enableMenu() {
    $('li.menu').bind('mouseenter', menuOn);
    $('li.menu').bind('mouseleave', menuOff);
    $('ul.sottomenu').bind('mouseenter', subMenuOn);
    $('ul.sottomenu').bind('mouseleave', subMenuOff);
}

function menuOn() {
    scrivi('menuOn');
    if (flagOnSubMenu) {
        scrivi('noAction');
        return;
    }

    var subMenuId;

    $('ul.sottomenu').hide();
    subMenuId = $(this).find("ul").attr('id');
    $('#' + subMenuId).show();
}

function menuOff() {
    scrivi('menuOff<br>');
    return;
}

function subMenuOn() {
    scrivi('subMenuOn');
    flagOnSubMenu = true;
}

function subMenuOff() {
    scrivi('subMenuOff');
    flagOnSubMenu = false;
    $(this).hide();
}

function scrivi(arg) {
    $('#debug').html($('#debug').html() + ' ' + arg);
}
4

2 に答える 2

3

マウスオーバーとマウスアウトのイベントでいくつかのクレイジーな問題が発生しました。

$("#menu>li").hover(
    function(){
        $("#menu *:animated").stop(true,true).hide(); //stop the madness
        $('ul',this).slideDown();
    },
    function(){
        $('ul',this).slideUp("fast");
    }
);

アニメーションを止めることが私にとっての鍵でした。それがないと、メニューをマウスで操作し終えた後も、アニメーションが長く表示され続けます。

于 2009-04-16T17:43:47.870 に答える
1

一部のブラウザ/フレームワークはイベントをバブルしますが、そうでないものもあります。

つまり(AFAブラウザがどちらの方向に進むかはわかりません)マウスが要素から子要素に移動すると、1つのブラウザがmouseoutをトリガーします。もう1つは、親要素によってもキャッチされる可能性のあるマウスオーバーをトリガーしますが、トリガーしません。

于 2009-04-16T17:18:01.723 に答える