1

我将 jQuery UI 菜单用作上下文菜单,因此当用户单击表格中的单元格时,它会显示相关选项。问题是,它并不是真的被设计成这样使用的,所以当用户在菜单外点击时它不会隐藏。

我尝试使用模糊方法:

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

但由于某种原因,即使您滚动到菜单中的某个选项,菜单也会隐藏。

有一个简单的解决方案吗?

编辑: 要拉出我使用的菜单:

$("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').find('*'))
             .bind('click',function(){
                $("#menu").css('top', '-1000px');
                $("#menu").css('left', '-1000px');
             });

让我们处理身体上的点击,如果点击不在菜单上的任何地方,请隐藏。

于 2013-02-27T20:23:23.817 回答
3
 $('body:not(#menu)').click(function(){
     $("#menu").css({ 'top' : '-1000px', 'left' : '-1000px' });
 });

我觉得这种方式更性感一点

于 2013-02-27T20:41:05.073 回答
2

当用户在菜单外单击时,我使用它来隐藏我的 jquery-ui 菜单。

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

类似于上面的答案,但隐藏菜单元素而不是将它们移出视口。在调用一次以保留其他单击功能后,还会禁用单击句柄。

于 2014-02-10T18:28:19.623 回答