2012-02-25 110 views
1

也许我只是累了,但我有一个右键菜单,我想要关闭时,用户点击其他任何地方比菜单。但是当用户点击其他东西时,我不知道如何让它消失。点击事件时,没有点击一个元素

下面是用于显示菜单代码:

// If mouse click on was pressed 
$('#content_list table tr').bind('mouseup', function(event) { 
    // if right click 
    if(event.which == 3) { 
     showRightClickMenu(event); 
    } 
    event.preventDefault(); 
    event.stopPropagation(); 
}); 

这是我得到的隐藏菜单

// If mouse click outside document 
$(document).bind('blur', function(event) { 
    hideRightClickMenu(); 
    event.stopPropagation(); 
}); 

// If mouse click not on the menu 
$('*:not(#rightClickMenu *)').bind('mousedown keydown', function(event) { 
    hideRightClickMenu(); 
    event.stopPropagation(); 
}); 

第一绑定检查文档和外部的用户点击第二个绑定检查用户是否单击除菜单以外的所有内容。 但第二个不真的工作。如果我点击菜单,菜单被隐藏。

不应该这么难imo ...任何人有任何想法?

回答

1

尝试这种方式

$(document.body).bind('click', function() { 
    hideRightClickMenu(); 
}); 

$(window).bind('blur', function() { 
    hideRightClickMenu(); 
}); 
+0

这似乎是做这项工作。谢谢。 – Patrik 2012-02-25 03:26:46

+0

@Patrik也从第二个答案中尝试一个例子。最近由于IE的一些问题,我用我的例子。例如,焦点在div上的滚动条上点击失败。 – Cheery 2012-02-25 03:32:06

0

focusout()事件试着用on(),而不是老bind()。即使有多个子菜单,这也可以工作。 http://jsfiddle.net/elclanrs/jhaF3/1/

// Something like this... 
$('#menu li').on('click', function() { 
    $(this).find('ul').show(); 
}).find('ul').on('focusout', function(){ 
    $(this).hide(); 
}); 
相关问题