2012-06-30 39 views
0

我正在使用JQuery构建多级(固定到3级)菜单。一切工作正常,但我想要做的是让所有的关卡在任何关卡被关闭时消失。不悬停JQuery

我正在寻找这样的事情:也

$('#categories AND #subcategories AND #tags').live('-NOT-mouseover', function(){ 
    $('#categories, #subcategories, #tags').remove(); 
}); 

,我不知道如何获取和操作员的一个jQuery选择。

+3

逗号的意思是AND –

+0

也许是纯粹的CSS实现?我相信那会更加强大...... –

+0

@ŠimeVidas。不支持所有主流浏览器。 – gdoron

回答

3
  1. 请勿使用live
  2. 给这些要素类
  3. remove去除好!只是隐藏的DOM元素。

代码:

$('.classForThoseelements').hover(function(){ 
    $(this).toggle(); 
}); 

当然,你仍然可以使用id S:

$('#categories, #subcategories, #tags')... 

但它并不干净。

+0

中删除脚本标记1.谢谢,我正在使用,因为我在文档准备好后将这些元素加载到DOM。 2.给元素一个类。 3.感谢您的建议! :) 并且该代码只要我的鼠标离开其中一个就隐藏了所有元素。我需要一种方法来知道你已经离开了所有人。 – Multitut

+0

@Multitut。您可以注册到mousemove事件并查看悬停的元素。注意这是一个“沉重的”操作。 – gdoron

5

选择它,你可以这样做:

$(".commonClass:not(:hover)") 

或(是两者的工作)

$('#categories:not(:hover), #subcategories:not(:hover), #tags:not(:hover)') 

虽然它实在是太丑了这第二个..

如果它是“over out”你想要的:

$(yourselector).hover(handlerOut); 

(这意味着)

$(yourselector).hover(function(){ console.log("i've just existed whatever you had in your selector"); }); 

“与”你想,我不认为这是支持的。你可能会不得不做这样的事情

$("#categories, #subcategories, #tags").hover(function(){ 
    if($('#categories:hover, #subcategories:hover, #tags:hover').length==0){ 
     doStuff(); 
    } 
}); 
+0

'hover'不是'mouseout'请阅读文档。 :) – gdoron

+0

我知道:P,但它是为了说明目的 – fmsf

1

现在,我想我明白这个问题,这里是在回答刺:

var leaveTimer; 
$('#categories, #subcategories, #tags').hover(function() { 
    if (leaveTimer) clearTimeout(leaveTimer); 
}, function() { 
    var $this = $(this); 
    leaveTimer = setTimeout(function() { 
     $this.remove(); 
    }, 500); 
}); 

这里是我的小提琴:http://jsfiddle.net/LFdsV/

虽然我不知道为什么你不使用.show().hide()与添加和删除元素。

另请注意,以上只适用于菜单元素嵌套。

+0

,只要你离开第一级关闭菜单。 – Multitut

+0

如果你的菜单元素是嵌套的,我不认为这会是一个问题。我正在创建一个jsFiddle来测试。 –

+0

现在等你发布你的HTML。请记住,这个问题已经解决了很多次:http://www.1stwebdesigner.com/css/38-jquery-and-css-drop-down-multi-level-menu-solutions/ –