Zurb Foundation Accordion嵌套手风琴

时间:2012-12-06 15:21:49

标签: jquery html css responsive-design zurb-foundation

我正在使用Zurb Foundation作为自适应网站。我想使用以下HTML结构将手风琴嵌入手风琴中:

<ul class="accordion">
    <li class="active">
        <div class="title">First Accordion Panel Title</div>
        <div class="content">First Accordion Panel Content</div>
    </li>
    <li>
        <div class="title">Second Accordion Panel Title</div>
        <div class="content">Second Accordion Panel Content</div>
    </li>
    <li>
        <div class="title">Parent Accordion Panel Title</div>
        <div class="content">

            <ul class="accordion">
                <li class="active">
                    <div class="title">Child Accordion Panel Title</div>
                    <div class="content">Child Accordion Panel Content</div>
                </li>
                ...
            </ul>

        </div>
    </li>
</ul>

使用此设置,当打开父级手风琴面板时,会打开后续的儿童手风琴面板(或者至少有一些标志设置为打开,因为箭头指向下方,就像打开的父母一样)和儿童手风琴功能休息。我可以在Foundation父手风琴中添加一个jQuery UI手风琴,但它不会像父母一样响应,因此可能会首先破坏使用Foundation的目的。

有没有人成功完成这项工作?

2 个答案:

答案 0 :(得分:1)

您只需要停止手风琴项目的点击事件进程,然后,如果您点击儿童手风琴项目,子点击事件不会关闭父项目。

修改很简单,你必须在点击处理程序中添加param事件,并在其他statament中使用 event.stopPropagation(); 和激活码当前点击的元素。

修改后的代码,请看一下代码注释:

;(function ($, window, undefined){   'use strict';

  $.fn.foundationAccordion = function (options) {
    var $accordion = $('.accordion');

    if ($accordion.hasClass('hover') && !Modernizr.touch) {
      $('.accordion li', this).on({
        mouseenter : function () {
          var p = $(this).parent(),
            flyout = $(this).children('.content').first();
          $('.content', p).not(flyout).hide().parent('li').removeClass('active'); 
          flyout.show(0, function () {
            flyout.parent('li').addClass('active');
          });
        }
      });
    } else { 
      //be sure to add the param event in the click function handler
      $('.accordion li', this).on('click.fndtn', function (event) {
        var li = $(this),
            p = $(this).parent(),
            flyout = $(this).children('.content').first();

        if (li.hasClass('active')) { 
          p.find('li').removeClass('active').end().find('.content').hide();
        } else {
          //stop event propagation          
      event.stopPropagation();
          $('.content', p).not(flyout).hide().parent('li').removeClass('active'); 
          flyout.show(0, function () {
            flyout.parent('li').addClass('active');
          });
        }
      });
    }

  };

})( jQuery, this );

答案 1 :(得分:0)

我遇到了这个问题。手风琴可以工作,但箭头指示器和造型就好像每个儿童手风琴都是开放式的。这是一个CSS“bug”,你可以通过在foundation.css的第715行和第716行添加一个额外的子选择器来解决这个问题:

ul.accordion > li.active > .title { background: white; padding-top: 13px; }
ul.accordion > li.active > .title:after { content: ""; display: block; width: 0; height: 0; border: solid 6px; border-color: #9d9d9d transparent transparent transparent; }

新的子选择器位于 li.active .title 之间。