不要悬停JQuery

时间:2012-06-30 21:42:22

标签: jquery hover

我正在使用JQuery构建一个多级(固定为3级)菜单。一切都运转良好,但我想做的是让所有级别在其中任何一个被徘徊时消失。

我正在寻找类似的东西:

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

另外,我不知道如何在JQuery选择器上获取AND运算符。

3 个答案:

答案 0 :(得分:5)

选择它,你可以这样做:

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

或(是的,他们都工作)

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

虽然这第二个真的很丑..

如果是你想要的“过度”:

$(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();
   }
});

答案 1 :(得分:3)

  1. 请勿使用live
  2. 为这些元素提供一个类
  3. remove从DOM中删除元素,只需隐藏它们。
  4. <强>代码:

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

    当然,您仍然可以使用id s:

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

    但它不是那么干净。

答案 2 :(得分: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()而不是添加和删除元素。

另请注意,只有嵌套菜单元素时才能使用上述内容。