我有一个带子菜单的菜单。当您单击菜单项时,子菜单将可见。当鼠标离开菜单时,子菜单将在1秒后隐藏。我想要的是如果鼠标在1秒之前返回菜单隐藏功能终止。
这就是我所做的:
HTML
<ul>
<li><span>Item</span></li>
<li><span>Item</span>
<ul>
<li><span>Item2</span></li>
<li><span>Item2</span></li>
<li><span>Item2</span></li>
<li><span>Item2</span></li>
</ul>
</li>
<li><span>Item</span></li>
<li><span>Item</span>
<ul>
<li><span>Item3</span></li>
<li><span>Item3</span></li>
<li><span>Item3</span></li>
<li><span>Item3</span></li>
</ul>
</li>
</ul>
CSS
body,htnl,ul{
padding:0;
margin:0;
}
ul {
list-style:none;
background:#ddd;
overflow:hidden;
}
li{
float:left;
display:block;
padding:3px 10px;
margin:4px;
background:#bbb;
}
ul ul{
position:absolute;
display:none;
left:0;
}
JQuery的
$("ul li").click(function(){
$(this).find("ul").show();
}).parent().mouseleave(function(){
setTimeout(function(){
$("ul li").find("ul").hide();
},1000);
}).parent().mouseenter(function(){
$("ul li").stop(true,true);
});
答案 0 :(得分:1)
将超时分配给变量并使用clearTimeout。
var timeout;
$("ul li").click(function(){
$(this).find("ul").show();
}).parent().mouseleave(function(){
timeout = setTimeout(function(){
$("ul li").find("ul").hide();
},1000);
}).parent().mouseenter(function(){
clearTimeout(timeout);
$("ul li").stop(true,true);
});
答案 1 :(得分:1)
您需要对超时有一些参考,以后可以取消:
var timeout;
$("ul li").click(function(){
$(this).find("ul").show();
}).parent().mouseout(function(){
clearTimeout(timeout)
timeout = setTimeout(function(){
$("ul li").find("ul").hide();
},1000);
}).mouseover(function(){
clearTimeout(timeout)
});
编辑: mouseover / out而不是mouseenter / leave,并在mouseout中添加了clearTimeout
(有助于在1000毫秒内多次点击)
答案 2 :(得分:0)
写下这个:
$("li ul").hide();
$("ul li").click(function(){
$("li ul").hide();//added here
$(this).find("ul").show();
}).parent().mouseleave(function(){......