【问题标题】:jQuery Accordion Panels that wont close不会关闭的 jQuery 手风琴面板
【发布时间】:2015-02-19 14:47:48
【问题描述】:

我是 jquery 的新手,我有以下代码可以从 div 创建手风琴样式面板。代码运行良好,但是,如果我单击已经打开的面板,它会关闭面板,然后立即重新打开它。这仅适用于它已经处于活动状态的面板。如果我点击另一个,它工作正常。

$(document).ready(function() {

    $('.accordion-section-title').addClass('active');
    // Open up the hidden content panel
    $('.accordion ' + '#accordion-1').slideDown(300).addClass('open'); 

    function close_accordion_section() {
        $('.accordion .accordion-section-title').removeClass('active');
        $('.accordion .accordion-section-content').slideUp(300).removeClass('open');

    }

    $('.accordion-section-title').click(function(e) {
        // Grab current anchor value
        var currentAttrValue = $(this).attr('href');

        if($(e.target).is('.active')) {
            close_accordion_section();

        }else {
            close_accordion_section();

            // Add active class to section title
            $(this).addClass('active');
            // Open up the hidden content panel
            $('.accordion ' + currentAttrValue).slideDown(300).addClass('open'); 
        }

        e.preventDefault();
    });


});

我附加了一个 js 小提琴,看起来每当我将标题包装在任何标签中时都会出现问题,如果它只是空白文本,它可以正常工作。

https://jsfiddle.net/russ1337/ynfs4zw3/

【问题讨论】:

    标签: javascript jquery accordion jquery-ui-accordion


    【解决方案1】:

    根据你的小提琴,我发现了问题。

    请查看更新的小提琴:

    https://jsfiddle.net/ynfs4zw3/2/

    问题出在以下代码:

    if($(e.target).is('.active')) {
                close_accordion_section();
            }else {
               ...
            }
    

    您的 if 语句说如果 e.target 处于活动状态,但如果您直接单击文本,则目标是 .accordion-section-title div 内部。哪个没有 .active 类。

    【讨论】:

      【解决方案2】:

      尝试删除 close_accordion_section();在 else 语句中:

      $(document).ready(function() {
      
          $('.accordion-section-title').addClass('active');
          // Open up the hidden content panel
          $('.accordion ' + '#accordion-1').slideDown(300).addClass('open'); 
      
          function close_accordion_section() {
              $('.accordion .accordion-section-title').removeClass('active');
              $('.accordion .accordion-section-content').slideUp(300).removeClass('open');
      
          }
      
          $('.accordion-section-title').click(function(e) {
              // Grab current anchor value
              var currentAttrValue = $(this).attr('href');
      
              if($(e.target).is('.active')) {
                  close_accordion_section();
      
              }else {
      
                  // Add active class to section title
                  $(this).addClass('active');
                  // Open up the hidden content panel
                  $('.accordion ' + currentAttrValue).slideDown(300).addClass('open'); 
              }
      
              e.preventDefault();
          });
      
      
      });
      

      【讨论】:

      • 我之前尝试过,它只是导致它们都没有关闭。
      • 你能连接 CodePen 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      相关资源
      最近更新 更多