【问题标题】:jquery superfish - onhide event firing too quicklyjquery superfish - onhide 事件触发太快
【发布时间】:2013-03-07 20:55:47
【问题描述】:

我正在使用带有 jquery 的 superfish (http://users.tpg.com.au/j_birch/plugins/superfish/#aa) 来进行菜单控制。几乎所有的元素都设置在

  • 元素嵌套在 .每次关闭超级鱼菜单时,我都想隐藏一个菜单项(我用 .show() 在其他地方显示)。所以,我的 superfish 初始化看起来像这样:
    $(document).ready(function () {
        $("#menu").superfish({
              delay: 400,
              onHide: function () { $("#HideThis").hide(); }
         });
     });
    

    但是,它会在 HideThis 悬停时隐藏 HideThis(没有悬停事件绑定到该元素)。这使得菜单项无法使用,因为当您尝试单击它而不是菜单关闭时它会隐藏。似乎没有任何其他事件可以符合我的目的,有什么想法可以通过超级鱼来实现吗?

    我使用的 HTML 如下所示:

    <ul id="menu">
      <li id="Stuff"><span>Stuff</span>
         <ul>
            <li id="HideThis" ><span>Hide This</span>
               <ul>
                  <li><span>Hidden Stuff</span></li>
               </ul>
            </li>
            <li id="DontHideThis" ><span>Dont Hide This</span></li>
         </ul>
      </li>
    </ul>
    

    编辑: 我能够找出问题所在:每次隐藏子菜单时都会触发“onHide”事件,而不仅仅是在整个菜单隐藏时(有趣的是,它也会在菜单首次显示时触发;所以 onHide 发生的频率比你高得多会期望)。所以,我最终不得不像这样过滤 onHide:

    $(document).ready(function () {
       $("#menu").superfish({
          delay: 400,
          onHide: function () { if ($('ul.sf-menu li.sfHover').length == 0) $("#HideThis").hide(); }
       });
    });
    

    并且'if'语句只有在所有菜单都被折叠时才为真。

  • 【问题讨论】:

      标签: jquery superfish


      【解决方案1】:

      你最好为这种事情创建一个 jsFiddle。 I made you one here 并在 .sf-menu 类之外添加了一些粗略的样式以挂起所述样式。从我所见,您的代码似乎可以按照您的意愿工作。如果这没有帮助,请随时描述我所缺少的。

      【讨论】:

      • Superfish 自动添加 .sf-menu 类,这很有帮助,因为我最终依赖它。我在这里稍微修改了 jsFiddle:jsfiddle.net/tBZPe/6,这样我想要隐藏和显示的内容在您单击菜单时可见,并且在菜单关闭时应该隐藏;我没有包括上面的过滤器,所以你可以看到什么是破坏(奇怪的是,它的破坏与我的项目中的略有不同,但非常接近)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多