javascript - 在 JQuery 中延迟隐藏子菜单

标签 javascript jquery html css menu

我有一个带有子菜单的菜单。当您单击菜单项时,将显示子菜单。当鼠标离开菜单时,子菜单将在 1 秒后隐藏。我想要的是,如果鼠标在 1 秒之前返回菜单,隐藏功能终止。

这是我做的:

jsFiddle

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

最佳答案

您需要对超时有一些引用,稍后您可以使用它来取消:

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 毫秒内进行多次点击)

fiddle :http://jsfiddle.net/MnL6m/

关于javascript - 在 JQuery 中延迟隐藏子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19924917/

相关文章:

javascript - Angular : passing object to different view in same controller

javascript - 如何使用 Handsontable 根据另一个自动完成单元格更新单元格

html - 垂直对齐奇怪地工作(在单元格标签上)

javascript - 主干 View 未定义

javascript - Angular 隔离范围值可以由 "true"或空设置

javascript - 使用 jQuery 动态添加和删除文本框并获取动态文本框的值并将其显示在文本框中

javascript - 将下一个文本包装在标签中

javascript - 如何更改 javascript for 循环条件?新手问题

javascript - 我在我的网站中添加了在线 JavaScript。如何更改由该 JavaScript 添加的网页中的 HTML?

javascript - 如何在正则表达式中允许%