【问题标题】:Child menu won't open when clicking parent menu单击父菜单时子菜单不会打开
【发布时间】:2017-12-21 04:42:11
【问题描述】:

我正在编辑一个 Wordpress 主题,但我不知道如何在单击父菜单时打开子菜单。我可以更改任何代码来实现它吗?

// expandable menus
var expand_link = $('<a class="menu-expand"><span class="screen-reader-text">' + js_i18n.next + '</span></a>');
var back_link = $('<li><a class="menu-back">' + js_i18n.back + '</a></li>');

$('.menu ul.menu-wrap').data('depth', 0);
$('.menu li.menu-item-has-children > a').after(expand_link);
$('.menu .sub-menu').prepend(back_link);
$('.menu .sub-menu').hide();

$('a.menu-back').click(function () {
    var parent_ul = $(this).closest('ul');
    menu_level_down(parent_ul);
    return false;
});

$('.menu-item-has-children a:not([href], .menu-back)').click(function () {
    var parent_ul = $(this).parent().find('ul:first');
    menu_level_up(parent_ul);
    return false;
});


function menu_level_up(parent_ul) {

    var depth = $('.menu ul.menu-wrap').data('depth');
    var old_depth = depth;
    var new_depth = depth + 1;

    parent_ul.show();

    $('.menu ul.menu-wrap').data('depth', new_depth)
        .addClass('depth-' + new_depth)
        .removeClass('depth-' + old_depth);

}


function menu_level_down(parent_ul) {

    var depth = $('.menu ul').data('depth');
    var old_depth = depth;
    var new_depth = depth - 1;

    parent_ul.hide(250);

    if (new_depth <= 0) {
        new_depth = 0;
    }

    $('.menu ul.menu-wrap').data('depth', new_depth)
        .addClass('depth-' + new_depth)
        .removeClass('depth-' + old_depth);

}

【问题讨论】:

  • 欢迎来到 Stack Overflow!感谢您分享代码示例。它似乎显示不正确,您可以编辑问题以修复格式吗?

标签: javascript css wordpress


【解决方案1】:

您可以简单地添加此事件,而无需使用这么多的代码。您可以简单地调用您的 WordPress 网站的菜单,然后可以使用 JavaScript 添加点击事件。按照这个 JavaScript 代码:

jQuery('YOUR_MENU_CLASS li.menu-item-has-children > a').after('<span class="sub-menu"></span>');
var menuBtns = jQuery('.sub-menu');
jQuery(menuBtns).on('click', function(e) {
    e.stopPropagation();
    var el = jQuery(this).siblings('ul');
    var tl = jQuery(this);
    jQuery('YOUR_MENU_CLASS li ul').not(el).hide();
    el.stop(true, true).toggle(400);
});

通过添加此 JavaScript 代码,您将能够处理尽可能多的子菜单。

【讨论】:

  • 您还需要添加 CSS 以获得更好的对齐和外观。
  • 更多详情请看这个FIDDLE代码:jsfiddle.net/abk6qymp,点击此链接即可实时查看以上代码(网址:jsfiddle.net/abk6qymp)
  • 感谢您的建议,但该功能已经存在。我正在寻找的功能是,当您访问带有子项的菜单项时,它将显示子菜单,而不是主菜单。如需参考,请访问:displaysanddesigns.dream.press/project-gallery
  • 那么我认为您需要根据页面创建多个导航。然后在特定的子链接页面上,您可以触发该导航。
  • 为此,您可以查看此链接:css-tricks.com/snippets/javascript/…(可能很有帮助)
猜你喜欢
  • 2021-08-12
  • 1970-01-01
  • 2013-02-25
  • 2023-01-10
  • 1970-01-01
  • 2023-03-23
  • 2019-03-05
  • 2016-10-30
  • 1970-01-01
相关资源
最近更新 更多