【问题标题】:End function when next instance in each is started当每个实例中的下一个实例启动时结束函数
【发布时间】:2017-02-17 18:28:00
【问题描述】:

一点 bg 信息:我正在努力使网站 100% 可通过键盘/选项卡导航,并且我坚持在通过选项卡时打开下拉菜单。

这是我目前所拥有的:

  <ul class="nav-wrap">

    <li class="nav-primary-pg"><a class="selected" href="/">Home</a>

    </li>

    <li class="nav-primary-pg parent-nav"><a href="/about-us/">About Us<b></b></a>
      <ul class="nav-secondary-pg">
        <li class="back"><a href="#"></a></li>
        <li class=""><a href="/about-us/knowledge-expertise">Knowledge &amp; Expertise</a>

        </li>


        <li class=""><a href="/why-bank/testimonials">Testimonials</a>

        </li>
      </ul>

    </li>

    <li class="nav-primary-pg last-nav-item parent-nav"><a href="/contact-us/">Contact Us<b></b></a>
      <ul class="nav-secondary-pg">
        <li class="back"><a href="#"></a></li>


        <li class=""><a href="/contact-us/application">Apply Now</a>

        </li>
        <li class=""><a href="/contact-us/quick-quote">Quick Quote</a>

        </li>
        <li class=""><a href="/contact-us/subscribe">Subscribe</a>
        </li>
      </ul>

    </li>

  </ul>

</section>

对于 jQuery:

$("a").each(function (i) { $(this).attr('tabindex', i + 1); });

$('.parent-nav > a').each(function(){
    $(this).focus(function() {
        $(this).parent().children(".nav-secondary-pg").show();
    });
});

现在,我的所有链接都正确获取了tabindex,并且当.parent-nav &gt; a 获得焦点时,二级导航会显示。问题是当关注下一个.parent-nav &gt; a 时该函数结束。会发生什么,当我浏览时,我最终会得到一个看起来像这样的页面:

当我到达.each() 中的下一个实例时,如何终止该函数?

【问题讨论】:

    标签: jquery function focus each nav


    【解决方案1】:

    首先,定位您的焦点事件处理程序,例如$('.nav-wrap a'),使其包含所有导航链接。然后,在您的焦点事件处理程序中,您可以检查当前是否打开了任何子导航。最后,检查您当前所在的子导航是否是打开的 - 如果不是,则关闭另一个子导航,然后打开您当前所在的子导航。

    此外,您不需要在此处使用.each(),因为您可以直接将事件处理程序附加到 jQuery 集合。最后,更喜欢.on('focus'...) 而不是`.focus(...) (here's why)。所以最终结果看起来像:

    $('.nav-wrap a').on('focus', function() {
        // find open sub nav (if it exists)
        var $openSubnav = $('.nav-wrap .nav-secondary-pg:visible');
    
        // find the subnav that you're currently in
        var $thisSubnav = $(this).closest('.parent-nav').children('.nav-secondary-pg');
    
        // if the subnav you're in is not already open,
        // close other subnav and open this one
        if (!$thisSubnav.is($openSubnav)) {
            $openSubnav.hide();
            $thisSubnav.show();
        }
    });
    

    【讨论】:

    • 不幸的是,这不起作用。目标是能够通过子导航 (.nav-secondary-pg) 中的链接进行切换,一旦.parent-nav &gt; a 的实例失去焦点,下拉菜单就会消失,我无法通过其子导航进行切换。
    • 好的,刚刚更新了答案 - 我在本地测试了它,它可以工作。
    • 成功了。谢谢!谢谢你解释你为什么做了你所做的事情。我尝试了多种方法来解决这个问题,但我想我开始想多了。
    • 很高兴为您提供帮助!顺便说一句 - 我刚刚对代码进行了一次小更新 - 将 $('.parent-nav a') 更改为 $('.nav-wrap a') 以便在您切换到没有子导航的顶级导航链接时关闭子导航。另外 - 随时支持我的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2016-06-11
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    相关资源
    最近更新 更多