【问题标题】:Is there a better way to do drop down menues in jQuery?有没有更好的方法在 jQuery 中做下拉菜单?
【发布时间】:2011-06-25 06:31:05
【问题描述】:

我正在尝试使用 jQuery 的 hover 来做下拉菜单。所以我尝试的第一件事是:

<ul id="menu">
  <li>
    <ul>
      ...
    </ul>
  </li>
  ...
</ul>

$(" #menu ul ").css({display: "none", visibility: "hidden"});
$(" #menu li ").hover(function() {
    $(this).find('ul:first:hidden').css(visibility:"visible", display:"block"}).show('fast');
  },
  function() {
    $(this).find('ul:first').css({visibility:"hidden", display:"none"});
  });

这很好用……在 Firefox 中。不幸的是,在我正在运行的 Chrome 版本(9.0.597.94)中,如果您将鼠标悬停在该下拉菜单上,它会在 $("#menu li#) 上触发鼠标。

好吧,我们有一个竞态条件,我需要做的就是添加一些计时器......

(function(){
var timer;
$(" #menu li ").hover(function() {
    $(this).find('ul:first:hidden').css(visibility:"visible", display:"block"}).show('fast');
  },
  function() {
    var header = $(this);
    timer = setTimeout(function() {
        header.find('ul:first').css({visibility:"hidden", display:"none"});
      }, 100);
  });
$(" #menu li > ul ").hover(function() {
    clearTimeout(timer);
  },
  function() {
    $(this).css({visibility:"hidden", display:"none"});
  });
}();

这真的很棒,直到有人说we need to put a textbox in that dropdown menu;当然,文本框会导致鼠标在 $("#menu li > ul") 上触发,所以现在我必须放置另一个嵌套的计时器层,我在想:有必须是更好的方法来做到这一点

所以我希望有人能告诉我...

【问题讨论】:

  • 问题 #1:为什么需要在菜单中添加文本框?
  • @Paulo 您可以放心地假设所有“设计”决策都发生在我无法控制的水平上。但是,这对我来说是一个反复出现的问题(下拉菜单和超时),如果我有一种更简单的方法来创建这些菜单,那就太好了。

标签: jquery html drop-down-menu


【解决方案1】:

无论如何...我想你可以看看这里:38 jQuery and CSS Drop Down Multi Level Menu Solutions

【讨论】:

  • 我在没有任何用例帮助的情况下完成了前十个。你认为你可以更具体吗?
【解决方案2】:

你有什么理由不能使用Suckerfish(或者是老练的Superfish)?这似乎是一个不需要重新发明的轮子......

【讨论】:

  • 我绝对想停止重新发明轮子,我喜欢 Suckerfish 背后的想法(将状态添加到 DOM 而不是 JS);但是有没有办法可以将这种方法应用于所有死者?现在它只适用于孩子,我需要孩子的孩子(等等......)。
  • 当你点击一个父节点时,你想让所有的后代都打开吗?或者你想要一次向下一层的能力吗?这是后者在 superfish 中的一个示例:users.tpg.com.au/j_birch/plugins/superfish/#a 前者需要一些额外的剥离...
  • 绝对是前者。我特别遇到的问题是孩子的一些孩子在父母身上触发了鼠标退出
  • 对不起,我现在很困惑。你的嵌套列表有多少层?您确定我指出的示例没有处理您想要的吗? (顺便说一句,我在 URL 上没有正确的 - users.tpg.com.au/j_birch/plugins/superfish/#examples)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2021-05-11
  • 1970-01-01
  • 2015-06-22
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多