【问题标题】:Bootstrap Accordion with dynamic ajax content具有动态 ajax 内容的 Bootstrap Accordion
【发布时间】:2017-07-28 15:35:19
【问题描述】:

我想用 ajax 的内容创建一个手风琴。

所以,我的 HTML 是:

<div class="latestinfo panel-group" id="accordion" role="tablist" aria-multiselectable="true">
// DYNAMIC CONTENT HERE
</div>

我的成功 ajax 是:

success: function(data) {
            data.items.forEach(function(e) {
                $('.latestinfo').append('<div class="panel panel-default"><div class="panel-heading" role="tab" id="headingOne"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">' + e.title + '</a></h4></div><div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne"><div class="panel-body">' + e.content + '</div></div></div>');
            });
       }

目前,

  • 显示内容
  • 当我点击第一个打开时
  • 当我点击其他时,第一个切换(打开/关闭)

问题是手风琴不能正常工作,如上所述。

【问题讨论】:

  • 只需从.panel-collapse 中删除一个使手风琴打开的类.in。另外,据我所知,所有手风琴的重复 ID 都存在问题。他们都有相同的#headingOne id。这就是它不起作用的原因。
  • @kwiat1990 谢谢!

标签: jquery ajax twitter-bootstrap accordion


【解决方案1】:

id 必须是唯一的(大声说出并想象回声)...

您可以使用.forEach()提供的index创建唯一的id
;)

您可以使用+ 将一个字符串连接到多行...
提高可读性。

// Assuming this JSON.
var data = {items:[{title:"ONE",content:"Something-1"},
                   {title:"TWO",content:"Something-2"},
                   {title:"THREE",content:"Something-3"}
                  ]
           };


var success = function(data) {
  data.items.forEach(function(item,index) {
    $('.latestinfo').append(
        '<div class="panel panel-default">'+
          '<div class="panel-heading" role="tab" id="heading_'+index+'">'+
            '<h4 class="panel-title">'+
              '<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse_'+index+'" aria-expanded="true" aria-controls="collapse_'+index+'">'+
                  item.title+
              '</a>'+
            '</h4>'+
          '</div>'+
          '<div id="collapse_'+index+'" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="heading_'+index+'">'+
            '<div class="panel-body">'+
              item.content+
            '</div>'+
          '</div>'+
        '</div>'
      );
  });
}

// Feaking an ajax response...
success(data);
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css">

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>


<div class="latestinfo panel-group" id="accordion" role="tablist" aria-multiselectable="true">
// DYNAMIC CONTENT HERE
</div>

【讨论】:

  • 这可以用来做同样的事情吗?每行没有标题但包含四个表格单元格?
  • 当然...您可以附加您想要的结构。在这里,它是一个 Bootstrap 手风琴,但它可以是任何东西。
猜你喜欢
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多