另一个建议...
用函数处理悬停,里面有元素和事件。所以你知道你什么时候在 mouseenter 什么时候在 mouseleave 上。您可以使用函数属性来保存计时器,并在需要时将其清除。
http://jsfiddle.net/blackjim/jw7Uz/3/
var handleHover = function(evObj){
var $this = $(this);
if(!$this.hasClass('open')){
return true;
}
if(evObj.type === 'mouseleave'){
// on mouseleave...
handleHover.timer = setTimeout(function(){
$this.removeClass('open');
},2000);
} else if(evObj.type === 'mouseenter'){
// on mouseenter...
if(handleHover.timer){ // find timer and clear it
clearTimeout(handleHover.timer);
delete handleHover.timer;
}
}
};
$('#myDropDown').hover(handleHover);