1

jQuery UI メニューをコンテキスト メニューとして使用しているため、ユーザーがテーブル内のセルをクリックすると、関連するオプションが表示されます。問題は、実際にはこのように使用するように設計されていないため、ユーザーがメニューの外をクリックしても非表示にならないことです。

私はぼかし方法を使ってみました:

$("#menu").menu({
    blur: function( event, ui ) {
        $("#menu").css('top', '-1000px');
        $("#menu").css('left', '-1000px');
    }
});

ただし、何らかの理由で、メニューのオプションの 1 つにスクロールしても、メニューが非表示になります。

これに対する簡単な解決策はありますか?

編集: 私が使用するメニューをプルアップするには:

$("table.adminScheduleViewer tr td:nth-child(4), table.adminScheduleViewer tr td:nth-child(5), table.adminScheduleViewer tr td:nth-child(6), table.adminScheduleViewer tr td:nth-child(7), table.adminScheduleViewer tr td:nth-child(8), table.adminScheduleViewer tr td:nth-child(9), table.adminScheduleViewer tr td:nth-child(10)").click(function(event){
    $("#menu").css('top', event.pageY);
    $("#menu").css('left', event.pageX);
});

$('body').click() を使用して非表示にしようとすると、常に最初に呼び出されるようです。jQuery がクリックを処理する順序を変更できますか?

4

3 に答える 3

3
 $('body:not(#menu)').click(function(){
     $("#menu").css({ 'top' : '-1000px', 'left' : '-1000px' });
 });

この方法は少しセクシーだと思います

于 2013-02-27T20:41:05.073 に答える
3

次のようなものはどうですか:

           $('body').not($('#menu').find('*'))
             .bind('click',function(){
                $("#menu").css('top', '-1000px');
                $("#menu").css('left', '-1000px');
             });

本文のクリックを処理し、クリックがメニューのどこにも発生しない場合は、非表示にします。

于 2013-02-27T20:23:23.817 に答える
2

ユーザーがメニューの外側をクリックしたときにjquery-uiメニューを非表示にするためにこれを使用しています。

$('body:not(#menu)')
.off('click')
.on( 'click', function() {
    $('body:not(#menu)')
    .off('click');
    $('#menu')
    .hide();
});

上記の回答に似ていますが、メニュー要素をビューポートから移動する代わりに非表示にします。また、一度呼び出された後、クリック ハンドルを無効にして、他のクリック機能をそのままにします。

于 2014-02-10T18:28:19.623 に答える