我很困惑为什么这不起作用,请有人指出我正确的方向吗?我写了一些JQuery来滑下子菜单。然而,当在菜单上移动鼠标时,它会触发数千个事件,我试图让它等待隐藏完成,然后再做另一个滑动。然而,这似乎不起作用:
$("li.title").children('ul').hide();
var hidden = true;
$("li.title").hover(
function() {
if (hidden == true){
var height = $(this).children('ul').height() + $(this).height();
$(this).height(height);
$(this).children('ul').slideDown();
var hidden = false;
}
},
function() {
$(this).height(25);
$(this).children('ul').hide(function() {
var hidden = true;
});
}
);
答案 0 :(得分:3)
从悬停中的回调函数中的var
变量中删除hidden
。您在本地重新分配这些变量,因此它不会监听全局hidden
变量。
改变这个:
var hidden = false;
到此:
hidden = false;
答案 1 :(得分:1)
您需要删除var
。问题是您正在为回调函数创建一个hidden
范围的新实例,而不是查看全局hidden
。
$("li.title").children('ul').hide();
var hidden = true,
myTimeout;
$("li.title").hover(
function() {
clearTimeout(myTimeout);
myTimeout = setTimeout(function(){
if (hidden == true){
var height = $(this).children('ul').height() + $(this).height();
$(this).height(height);
$(this).children('ul').slideDown();
hidden = false; //Removed var here
}
},100);
},
function() {
clearTimeout(myTimeout);
myTimeout = setTimeout(function(){
$(this).height(25);
$(this).children('ul').hide(function() {
hidden = true; //and here
});
},100);
}
);