jQuery,函数内的函数目标错误的div

标签 jquery html css arrays toggle

我有一组隐藏的对象 div在 wrapper 里面,它也有一个 child <a>在隐藏对象上切换 slideDown 效果的按钮。但是,当单击它时,它只会打开最后一个对象中隐藏的 div,而不是仅在其子对象中打开

简化的 HTML:

<div class="panel-compressed">
  <div class="panel-header">
     <div class="toggle-panel">
       <a href="#" class="toggle-panel-btn">Open content</a>
     </div>
   </div>
   <div class="panel-body">
       <p>Content goes here</p>
   </div>
</div>

<div class="panel-compressed">
  <div class="panel-header">
     <div class="toggle-panel">
       <a href="#" class="toggle-panel-btn">Open content</a>
     </div>
   </div>
   <div class="panel-body">
       <p>Content goes here</p>
   </div>
</div>

<div class="panel-compressed">
  <div class="panel-header">
     <div class="toggle-panel">
       <a href="#" class="toggle-panel-btn">Open content</a>
     </div>
   </div>
   <div class="panel-body"> <!-- THIS OPENS WHEN CLICKING ANY .toggle-panel-btn -->
       <p>Content goes here</p>
   </div>
</div>

JS:

var $panelToggle = $('.toggle-panel-btn'); //Toggle button
var $panelBody = $('.panel-body'); //Hidden content
var $panelCompressed = $('.panel-compressed') //Wrapper

function togglePanel(){ 
         $this = $(this);
         $this.find($panelBody).hide();
        //Open .panel-body
        function showPB() {
            $this.find($panelBody).slideDown();
            $this.find($panelToggle).one("click", hidePB);
            $this.addClass('dropdown-open');
        }

        //close .panel-body
        function hidePB() {
            $this.find($panelBody).slideUp();
            $this.find($panelToggle).one("click", showPB);
            $this.removeClass('dropdown-open');
        }
        $this.find($panelToggle).click("click", showPB);
    }

    $panelCompressed.each(togglePanel);

最佳答案

您的代码太复杂了。

这是一个更简单的:

$(function() {
  $('.panel-compressed .toggle-panel-btn').on("click",function(e) {
     e.preventDefault(); // cancel link click
     $(this).closest(".panel-compressed")
       .toggleClass("dropdown-open")
       .find('.panel-body').slideToggle();
  });
});
.panel-body { display:none }
.dropdown-open { background-color:pink }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="panel-compressed">
  <div class="panel-header">
     <div class="toggle-panel">
       <a href="#" class="toggle-panel-btn">Open content</a>
     </div>
   </div>
   <div class="panel-body">
       <p>Content goes here</p>
   </div>
</div>

<div class="panel-compressed">
  <div class="panel-header">
     <div class="toggle-panel">
       <a href="#" class="toggle-panel-btn">Open content</a>
     </div>
   </div>
   <div class="panel-body">
       <p>Content goes here</p>
   </div>
</div>

<div class="panel-compressed">
  <div class="panel-header">
     <div class="toggle-panel">
       <a href="#" class="toggle-panel-btn">Open content</a>
     </div>
   </div>
   <div class="panel-body"> <!-- THIS OPENS WHEN CLICKING ANY .toggle-panel-btn -->
       <p>Content goes here</p>
   </div>
</div>

关于jQuery,函数内的函数目标错误的div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37346854/

相关文章:

jquery - AngularJS 中的 Kendo UI 颜色选择器无法设置宽度

html - 当屏幕小于 991px 时,DIV 得到 2 行

python - 使用python中的beautifulsoup从具有更多文本内容的网页中提取数据

javascript - AngularJS 点击链接打开文本区域

jquery - 为什么 jQuery 死链接删除代码会删除所有链接?

javascript - jQuery 和 AJAX 只能工作一次

javascript - 如何阻止图像在达到某个点后缩小?

html - 如何在其父 div 中保留旋转图像?

java - 带有 GWT 的 HTML(不是文本)的多行省略号

javascript - 保持 div 的形状