简体   繁体   English

多层JQuery手风琴坏了

[英]Broken Multi-Tier JQuery Accordion

JSFiddle 的jsfiddle

http://jsfiddle.net/5rkrq4bw/ strong text http://jsfiddle.net/5rkrq4bw/ 强文本


JQuery Code jQuery代码

// Side Menu Starts
$('.SideNav .Menu a.MenuDrop').click(function(event){
    event.preventDefault();
    if(!$(this).hasClass('Active')) {
        if(!$(this).parent().parent().hasClass('Active') && $(this).next().hasClass('sub-menu')) {
            $(this).next().slideToggle();
            $(this).addClass('Active');
        } else {
            $('.SideNav .Menu li ul').slideUp();
            $(this).next().slideToggle();
            $('.SideNav .Menu a.MenuDrop').removeClass('Active');
            $(this).addClass('Active');
        }
    }
});
//Side Menu Ends

The Problem 问题

Trying to integrate multiple tiers I am finding the problem of only being able to have one open at a time and checking to see if any others are open to close them. 尝试集成多个层时,我发现一个问题是一次只能打开一个层,然后检查是否有其他层打开以关闭它们。

What should happen 应该发生什么

Demo 演示

  • Category 类别
    • Sub-Cat 子猫
      • Link 链接
      • Link 链接
      • Link 链接
    • Sub-Cat 子猫
      • Link 链接
      • Link 链接
      • Link 链接
  • Category 类别
    • Sub-Cat 子猫
      • Link 链接
      • Link 链接
      • Link 链接
    • Sub-Cat 子猫
      • Link 链接
      • Link 链接
      • Link 链接

Explanation 说明

  1. Only one 'Category' to be expanded at a time 一次只能扩展一个“类别”
  2. Only one 'Sub-Cat' inside to be expanded at a time 一次只能扩展一个“子猫”
  3. Adding / removing of 'Active' class. 添加/删除“活动”类。

Resolved: http://jsfiddle.net/wo4sj4pt/ 已解决: http : //jsfiddle.net/wo4sj4pt/

JQuery Code: jQuery代码:

(function(jQuery){
     jQuery.fn.extend({  
         accordion: function() {       
            return this.each(function() {

                var $ul = $(this);

                if($ul.data('accordiated'))
                    return false;

                $.each($ul.find('ul'), function(){
                    $(this).data('accordiated', true);
                    $(this).hide();
                });

                $.each($ul.find('a'), function(){
                    $(this).click(function(e){
                        activate(this);
                        return void(0);
                    });
                });

                var active = $('.Active');

                if(active){
                    activate(active, 'toggle');
                    $(active).parents().show();
                }

                function activate(el,effect){
                    if (!effect) {
                      $(el)
                       .toggleClass('active')
                       .parent('li')
                       .siblings()
                       .find('a')
                       .removeClass('active')
                       .parent('li')
                       .children('ul, div')
                       .slideUp('fast');
                    }
                  $(el)
                  .siblings('ul, div')[(effect || 'slideToggle')]((!effect)?'fast':null);
                }
            });
        } 
    }); 
})(jQuery);

Usage: 用法:

  1. Link to JQuery and the above script 链接到JQuery和上面的脚本
  2. Make a multi-level list 制作多级列表
  3. Give your list a class/ID name such as '.SideNav' 给您的列表一个类/ ID名称,例如“ .SideNav”
  4. Tell the script this is your accordion $('.SideNav').accordion(); 告诉脚本,这是您的手风琴$('.SideNav').accordion();

http://jsfiddle.net/sabithpocker/5rkrq4bw/2/ http://jsfiddle.net/sabithpocker/5rkrq4bw/2/

$('.SideNav .Menu a.MenuDrop').click(function(event){
    event.preventDefault();
    console.log(this);
    var subMenuToExpand = $('ul.sub-menu', $(this).parent());
    var otherVisibleSubMenu = $('ul.sub-menu:visible', $(this).parents('.Menu'));
    otherVisibleSubMenu.hide();
    subMenuToExpand.show();
});

$('.SideNav .Menu a.MenuDrop').click(function(event){
    $('ul.sub-menu:visible', $(this).parents('.Menu')).slideUp(50);
    $('ul.sub-menu', $(this).parent()).slideDown();
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM