【问题标题】:Custom jQuery Dropdown Navigation nested focus issue自定义 jQuery 下拉导航嵌套焦点问题
【发布时间】:2013-04-11 11:10:56
【问题描述】:

为什么在创建定制的 jQuery 脚本时我总是遇到一个问题让我退缩!

不管怎么说,我正在向你们所有人伸出援手,希望有一个善良的灵魂能告诉我我做错了什么。

问题

我为一个站点创建了一个下拉 jQuery 导航菜单,当我尝试将光标从父级移动到嵌套子级并运行“隐藏()”时,只有菜单认为鼠标正在离开“目标” ' 使下拉菜单消失的函数。

我需要的是 .dropnav 元素(下拉菜单)在上述情况发生时不触发 '$target.on('mouseover', function(e) {' 部分代码。

真的卡住了,所以非常感谢任何帮助。

jQuery 代码

var hover, $this;

        $target = $("header nav > ul > li");
        $menu = $target.find('.dropnav');


        $target.on('mouseover', function(e) {
            e.stopPropagation();
            clearTimeout(hover);

            $this = $(this)
            $this.toggleClass('active');

            hide();

            hover = setTimeout(show,400);

        }).mouseout(function() {
            clearTimeout(hover);
            hover = setTimeout(hide,800);
        });

        if($(".dropnav:visible")) {
            $menu.click(function(e) { e.stopPropagation(); });
            $(document).click(function() { hide(); });
        }

        function show() {
            $this.children('.dropnav').slideDown(800);
        }

        function hide() {
            $('.dropnav:visible').fadeOut(200);
        }

HTML 代码

<header>
<div id="nav-filler"></div>
<div id="header-inner">
    <nav>
        <ul>
            <li>
                <a id="products" title="Browse our products">Products</a>
                <div class="dropnav">
                    <div id="dropnav-filler"></div>
                    <div id="dropnav-inner">
                        <ul id="products-menu" class="dropnav-links">
                            <li>
                                <h6>Desktops</h6>
                                <ul>
                                    <li><a href="/products/desktops/pc-one" title="Broadleaf">PC One</a></li>
                                    <li><a href="/products/desktops/pc-access" title="Broadleaf">PC Access</a></li>
                                    <li><a href="/products/desktops/pc-max" title="Broadleaf">PC Max</a></li>
                                    <li><a href="/products/desktops/pc" title="Flex">PC</a></li>
                                    <li><a href="/products/desktops/all-in-one" title="All In One">All In One</a></li>
                                </ul>
                                <h6>Workstations</h6>
                                <ul>
                                    <li><a href="/products/workstations/pcx" title="Broadleaf X">PC X</a></li>
                                    <li><a href="/products/workstations/d4-rhino" title="D4 Rhino">D4 Rhino</a></li>
                                    <li><a href="/products/workstations/d4-3ds" title="D4 3DS">D4 3DS</a></li>
                                    <li><a href="/products/workstations/d4-inventor" title="D4 Inventor">D4 Inventor</a></li>
                                    <li><a href="/products/workstations/rackstation" title="Rackstation">Rackstations</a></li>
                                </ul>
                            </li>
                            <li>
                                <h6>On The Go</h6>
                                <ul>
                                    <li><a href="/products/onthego/laptops" title="Laptop">Laptops</a></li>
                                    <li><a href="/products/onthego/tablets" title="Tablet">Tablets</a></li>
                                    <li><a href="/products/onthego/ultrabooks" title="Ultrabook">Ultrabooks</a></li>
                                </ul>
                            </li>
                        </ul>
                        <div id="showcase">
                            <div id="sc-inner"></div>
                        </div>
                    </div>
                </div>
            </li>
            <li>
                <a id="products" title="Browse our products">Other Products</a>
                <div class="dropnav">
                    <div id="dropnav-filler"></div>
                    <div id="dropnav-inner">
                        <ul id="products-menu" class="dropnav-links">
                            <li>
                                <h6>Desktops</h6>
                                <ul>
                                    <li><a href="/products/desktops/pc-one" title="Broadleaf">PC One</a></li>
                                    <li><a href="/products/desktops/pc-access" title="Broadleaf">PC Access</a></li>
                                    <li><a href="/products/desktops/pc-max" title="Broadleaf">PC Max</a></li>
                                    <li><a href="/products/desktops/pc" title="Flex">PC</a></li>
                                    <li><a href="/products/desktops/all-in-one" title="All In One">All In One</a></li>
                                </ul>
                                <h6>Workstations</h6>
                                <ul>
                                    <li><a href="/products/workstations/pcx" title="Broadleaf X">PC X</a></li>
                                    <li><a href="/products/workstations/d4-rhino" title="D4 Rhino">D4 Rhino</a></li>
                                    <li><a href="/products/workstations/d4-3ds" title="D4 3DS">D4 3DS</a></li>
                                    <li><a href="/products/workstations/d4-inventor" title="D4 Inventor">D4 Inventor</a></li>
                                    <li><a href="/products/workstations/rackstation" title="Rackstation">Rackstations</a></li>
                                </ul>
                            </li>
                            <li>
                                <h6>On The Go</h6>
                                <ul>
                                    <li><a href="/products/onthego/laptops" title="Laptop">Laptops</a></li>
                                    <li><a href="/products/onthego/tablets" title="Tablet">Tablets</a></li>
                                    <li><a href="/products/onthego/ultrabooks" title="Ultrabook">Ultrabooks</a></li>
                                </ul>
                            </li>
                        </ul>
                        <div id="showcase">
                            <div id="sc-inner"></div>
                        </div>
                    </div>
                </div>
            </li>
        </ul>
    </nav>
</div>

http://jsfiddle.net/kYkba/11/ 链接供任何可以访问的人使用。

提前致谢。

【问题讨论】:

    标签: jquery html drop-down-menu


    【解决方案1】:

    使用 mouseenter/mouseleave 代替 mouseover/mouseout :)

    编辑

    你也应该改变

    }).mouseout(function() {
    

    }).on('mouseleave',function() {
    

    【讨论】:

    • 我曾经有过,然后改为 mouseover/mouseout 看看是否有帮助,但遗憾的是它没有:( ty 的建议虽然。
    • 好的,我出于好奇测试了这个,它有效!非常感谢,我不知道为什么昨天我使用那个组合时它不起作用。
    • 你也应该注意这一行 }).mouseout(function() { 并使用 .on(),像这样: }).on('mouseleave',function() {跨度>
    • 啊,你认为所谓的“绑定”对吗?在我上一条评论中,我忘了提到我没有使用 mouseeneter.on 也许这就是原因。
    • 是的,.on() 是处理事件处理程序附件的新方法
    【解决方案2】:

    看到当你mouseover li 时它会显示,但是当你去选择.dropnavfadeOut 中的某个项目时,试试这个:

    var $target = $("header nav > ul > li");
    $target.hover(function (e) {
       $('> .dropnav', this).slideDown();
    },function () {
       $('> .dropnav', this).fadeOut();
    });
    

    Demo

    【讨论】:

    • 要试试这个并添加一些我必须允许鼠标超时恢复等的代码。
    • 我接受了 Robin 的回答,因为他包含了我所有针对可用性的特定编码。感谢您的建议,它也有效。
    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多