【问题标题】:How can I load function in JS before I call it the first time?在第一次调用之前如何在 JS 中加载函数?
【发布时间】:2016-07-11 09:05:48
【问题描述】:

我正在创建一个 megamenu,它工作正常,直到我尝试延迟 slideDown。我使用 jQuery。 slideUp 和 slideDown 的代码如下:

$(document).ready(function(){
    $(".dropdown").hover(            
        function() {
            $('.dropdown-menu', this).not('.in .dropdown-menu').stop(true,true).delay(500).slideDown("fast");
            $(this).toggleClass('open');        
        },
        function() {
            $('.dropdown-menu', this).not('.in .dropdown-menu').stop(true,true).slideUp("fast");
           $(this).toggleClass('open');       
        }
    );
});

当我刷新页面并将鼠标悬停在“.dropdown”元素上时,它会立即向下滑动。但是,当我再次将鼠标悬停在它上面时,它会延迟得很好,就好像我第一次将鼠标悬停在它上面时调用了它一样。
每个菜单按钮也是如此(分别执行每个“.dropdown”元素)。
我认为错误在于 $(document).ready(),所以我等待整个页面加载,但这并没有帮助。
你对我做错了什么有什么建议吗?

让我给你看我的菜单片段。它还使用引导程序。

<ul class="nav navbar-nav">
            <li class="dropdown mega-dropdown">
                   <a href="#" class="dropdown-toggle" data-toggle="dropdown">OLEJE </a>                    
                    <ul class="dropdown-menu mega-dropdown-menu">
                         <li class="col-sm-3">
                              <ul>
                                   <li class="dropdown-header" style="color:#F96211">Syntetyczne</li>
                                   <li class="divider"></li>
                                   <li><a href="#">Oleje silnikowe 0W30</a></li>
                                   <li><a href="#">Oleje silnikowe 0W40</a></li>
                              </ul>
                         </li>
                    </ul>                    
            </li>
</ul>

我把它拆掉了,所以它只显示了基本的骨架。

【问题讨论】:

  • 使用.stop().not('.in .dropdown-menu') 很难说它是正确的没有看到最小的HTML 代码示例

标签: javascript jquery css menu


【解决方案1】:

我认为这不是 DOM 就绪的错。
无需详细说明(因为我无法测试您的代码),这就是我将如何编写上述内容

jQuery(function($){ // DOM ready. $ alias secured.

    $(".dropdown").hover(function(evt) {

       var mEnt = evt.type==="mouseenter";
       $(this).toggleClass('open')
              .find('.dropdown-menu')
              .not('.in')  // without seeing your HTML I'm not sure about this line
              .stop()
              .delay(mEnt?500:0)
              .slideToggle("fast");

    });          

});

【讨论】:

  • 我基本上用你的代码替换了我的代码,让你没有改变的部分保持不变(所以 slideUp 部分),现在当我第一次显示它时悬停它,然后向上滑动,然后看起来像js 启动了,所以就像我第二次将鼠标悬停在它上面时一样,它按预期工作。不过,这仍然不是第一次。我将编辑问题以放入 som html。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2019-02-10
相关资源
最近更新 更多