所以我有一个下拉列表,我根据元素点击隐藏和显示。但是,如果我单击文档中的任何其他位置,我还希望隐藏此下拉列表。
这是下拉代码:
function dropdown(){
$('#smenubutton').click(function(e){
var submenu = $(this).find('.submenu');
if (submenu.is(':visible')){
submenu.hide();
}else{
submenu.show();
}
});
}
然而,像这样的代码:
$(document).click(function(e){
e.stopPropagation();
$('.submenu').hide();
});
显然总是会隐藏子菜单。两者都加载在文档加载中。我知道我只是错过了这么简单的事情。请随意指出我的副本(我已尝试搜索但根据我的需求找不到任何问题)并关闭此问题。
答案 0 :(得分:2)
你应该检查e.target是否是子菜单,并且只有当子菜单不是时才隐藏子菜单(在这种情况下我会检查它是否有类子菜单)
$(document).click(function(e){
if($(e.target).hasClass("submenu")){
$('.submenu').hide();
}
});
答案 1 :(得分:1)
由于您提到“浏览器之外”,请尝试以下操作:http://www.thefutureoftheweb.com/blog/detect-browser-window-focus
编辑:由于OP编辑了问题,我将编辑答案:
$(document).on('click', '#submenu', function(e) {
e.stopPropagation();
// show or hide the submenu here
});
$(document).on('click', function(e) {
// hide submenu here
});
答案 2 :(得分:0)
试试blur()
或focusout()
:
$('#smenubutton').blur(function(){ submenu.hide(); });
// OR
$('#smenubutton').focusout(function(){ submenu.hide(); });
如果不起作用,请尝试明确tabindex
。