2014-02-11 43 views
0

我敢肯定,我錯過了這裏明顯的東西... 我把一個菜單,我想要下拉菜單項中的一個菜單項時,我也希望它保持打開,直到鼠標離開下拉區域,而不是離開菜單項目的時間。鼠標移到元素上 - 在父元素或其他元素上執行某些操作/移除 - 撤消某些內容?

JQUERY:

var hov = 1; 
$("#link-a").mouseover(function(){ 
    clearTimeout(); 
    hov = 1; 
    $("#dropdown").addClass("active"); 
}); 

$("#dropdown").mouseout(function(){ 
    hov = 0; 
    setTimeout(function(){ 
     if(hov == 0){ 
      $(this).removeClass("active"); 
     } 
    }, 300); 
}); 

HTML:

<div id="dropdown"> 
    <ul> 
     <li id="link-a">Link A</li> 
     <li id="link-b">Link B</li> 
     <li id="link-c">Link C</li> 
    </ul>    
</div> 

CSS:

#dropdown { 
    height: 0; 
} 
#dropdown.active { 
    height: 600px; 
} 
+0

您可以編輯http://jsfiddle.net/arunpjohny/9Jh36/2/重現問題 –

回答

1

我認爲你真正想要的是mouseleave事件而不是mouseout

jQuery(function() { 
    $("#link-a").mouseover(function() { 
     $("#dropdown").addClass("active"); 
    }); 

    $("#dropdown").mouseleave(function() { 
     $(this).removeClass("active"); 
    }); 
}) 

演示:Fiddle

+0

謝謝。這似乎是爲我工作的唯一解決方案。 – PaulC

1

簡單的。你錯過了#表示「元素與ID。」在$("link-a")

$("#link-a").mouseover(function(){ 
    clearTimeout(); 
    hov = 1; 
    $("#dropdown").addClass("active"); 
}); 
1
var hov = 1; 
var timer; //declare variable named timer accessible to both function below 
$("#link-a").mouseover(function(){ 
//^missing # for id-selector 
    clearTimeout(timer); //clear timer 
    hov = 1; 
    $("#dropdown").addClass("active"); 
}); 

$("#dropdown").mouseout(function(){ 
    hov = 0; 
    timer = setTimeout(function(){ //assign setTimeout to variable timer 
     if(hov == 0){ 
      $(this).removeClass("active"); 
     } 
    }, 300); 
}); 


如果你想在所有的李標籤添加鼠標內部 #dropdown

$("#dropdown li").mouseover(function(){ 
    clearTimeout(timer); //clear timer 
    hov = 1; 
    $("#dropdown").addClass("active"); 
}); 
+0

我不知道爲什麼,但我只是不能讓這個正常工作。當我沮喪時,下拉菜單將保持打開狀態,但我無法弄清楚原因。但是,謝謝。 – PaulC