JQuery手风琴在文档加载时激活,而不是在点击时激活

JQuery Accordion active on document load instead of on click despite having active false

本文关键字:激活 加载 手风琴 JQuery 文档      更新时间:2023-09-26

我正在使用包含嵌套手风琴的JQuery手风琴,当我在纯HTML中使用它们时,它工作得很好。但是在我的例子中,我必须在JQuery中加载嵌套的手风琴,这样可以防止手风琴只有在单击时才被激活。当页面加载时,手风琴已经打开。我也试着把手风琴最后在JS,它仍然没有工作。代码片段:

HTML/ERB:

<% @year.each do |y| %> 
<div class="accordion" id="years">
  <h3 class="ui-accordion-header year"><a href="#"><%= y.date %></a></h3>
</div>
<% end %>

JS:

var months = [];
var loadURL = "stats/show";
$("div.accordion").accordion({
         collapsible: true,
         active: false,
         autoHeight: true,
         event: "click"
});  

$.getJSON(loadURL, function(data){
  //parse data and place in empty arrays
  for(var key in data.month){
     months.push(data.month[key]);
  }
  //give each year tab an index number
  $('h3.year').each(function(index){
      $(this).attr('id', 'ui-accordion-years-header-' + index);
  })
  for(var i = 0; i < months.length; i++){
    //create and append month container to each year tab
    $("#ui-accordion-years-header-" + i).after("<div id='months" + i + "' class='months accordion ui-accordion ui-widget ui-helper-reset ui-accordion-content ui-widget-content'></div>");  

    for (var j = 0; j < months[i].length; j++){
        //parse each month of the year and place month tabs in month container
        var accordion_month = '<h3 class= "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" role="tab" id="months_tab' + j + '" aria-controls="ui-accordion-1-panel-0" aria-selected="false" tabindex="0"><a href="#" name=' + months[i][j] + '>' +  months[i][j] + '</a></h3>';

        $("#months" + i).append(accordion_month);
    }
  }
}

将accordian放入$.getJSON()

在获取数据之前,您所做的将按顺序添加。

所以accordion是空的

然后,你试着获取数据…

所以accordion不能没有数据。

所以把accordion放到$.getJSON语句之后,就可以使用accordion了

初始化手风琴之后,您成功获取json并附加其中的所有元素。