【问题标题】:making a vertical sliding menu with jquery用jquery制作垂直滑动菜单
【发布时间】:2013-07-17 06:20:03
【问题描述】:

这是我的html:

<ul id="dmenu">
    <li><a href="#">menu item one</a></li>

    <li><a href="#">menu item two</a>
            <ul class="displayNone">
                <li><a href="#">menu item one</a>
            </ul>
    </li>
</ul>

当用户单击其中一个 a 标签时,我希望我的代码检查父 li 标签中是否有任何 ul 标签。如果有,那么我想阻止 a 标签的默认操作并滑动切换子 ul 元素

我的 jquery 自动取款机:

$('#dmenu > a').click(function(e) {
    if (this.parent().has('ul')) {
        e.preventDefault();
        $(this).children().slideToggle();
    }
});

【问题讨论】:

  • 那么问题出在哪里?
  • 它不起作用 - 代码什么也没做,我不知道为什么
  • 这是否包含在 document.ready 中?
  • 是的,什么都没有发生
  • 将您的选择器更改为#dmenu &gt; li a。假设#dmenuul 元素,那么您的原始选择器不会做任何事情,因为a 绝不是#dmenu直接 子元素。

标签: javascript jquery html user-interface


【解决方案1】:

您正在对 a 的子项进行滑动切换

$(this).children().slideToggle(); 更改为

$(this).parent().children('ul').slideToggle();

您的选择器 #dmenu &gt; a 也是错误的 - 您的顶级菜单没有该 ID,如果有,则没有直接锚作为 ul 的子级 - 删除 &gt; 并将 ID dmenu 添加到你置顶 ul 或容器元素

编辑

正如 Austin 所指出的,由于您有嵌套列表,因此您可能希望将点击事件限制在顶层,以便您可以使用 #dmenu &gt; li a

Example

【讨论】:

  • 最好还是用#dmenu &gt; li a
  • @AustinBrunkhorst 为什么要添加一个额外的选择器,您会减慢查询速度
  • 因为有嵌套列表。使用该查询将消除检查父级是否为无序列表的需要。
  • 啊,忘了嵌套列表的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多