jquery - 如何通过 AJAX 在 JQuery Accordion 中加载内容

标签 jquery ajax jquery-ui accordion

我有一个加载大量数据的 jquery Accordion 。该 Accordion 是通过查询数据库生成的。我的问题 - 有没有办法在单击 Accordion 的特定元素之前不加载内容?基本上,我想将 jquery tab ajax 内容加载的功能复制到 Accordion 。

最佳答案

我正在使用 jquery ui-1.11.4 并遇到了同样的问题。这是我拼凑出来的解决方案。

Javascript:



var already_loaded = new Object();  // used to track which accordions have already been loaded

$(function() {
    $( "#accordion" ).accordion({
        collapsible: true,
        active: false,
        //heightStyle: 'fill', // http://jqueryui.com/accordion/#fillspace  -- Just sets the height of the accordion to the height of it's parent container.  We need a way to change the height of the parent to that of the newly added content.
        activate: function (e, ui) {
            // only fire when the accordion is opening..
            if(ui.newHeader.length>0){                
                // only retrieve the remote content once..
                if(! already_loaded[ui.newHeader[0].id]==1){
                    var srcObj = $(ui.newHeader[0]).children('a');
                    var url = srcObj.attr('href');
                    var folder = srcObj.attr('data-folder');
                    //$.get(url, function (data){  // if you wanted to use the GET method uncomment this and comment the next line.  Be sure to add any needed query string parameters to the URL.
                    $.post(url, {doCmd:'getFolderFiles', folder:srcObj.attr('data-folder')}, function (data){
                        $(ui.newHeader[0]).next().html(data);
                        var contentDiv = $(ui.newHeader[0]).next()[0];
                        $('#'+contentDiv.id).height(contentDiv.scrollHeight);
                        //$("#accordion").accordion("refresh"); // http://api.jqueryui.com/accordion/#method-refresh -- The documentation isn't clear on this but this only refreshes added/removed panels.  Does not refresh existing panels with newly added content.
                        already_loaded[ui.newHeader[0].id]=1; // keep track of the loaded accordions
                    });
                }
            }
        }

    });

});

HTML:


<div id="accordion">
      <h3><a href="program_to_generate_accordion_content.php" data-folder="2015">2015 Files</a></h3>
      <div>
          <p>
              Loading... Please wait.
          </p>

      </div>

      <h3><a href="program_to_generate_accordion_content.php" data-folder="2016">2016 Files</a></h3>
      <div>
          <p>
              Loading... Please wait.
          </p>
      </div>
</div>

关于jquery - 如何通过 AJAX 在 JQuery Accordion 中加载内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1880845/

相关文章:

javascript - jQuery 中代码的运行顺序

jquery - ASP.Net/AJAX - 使用 c# 在 asp.net 中动态加载用户控件后,事件不会触发

javascript - 新的 JQuery 1.5 打破了良好的旧图像灯箱...为什么?

javascript - Fabricjs 在调整大小时捕捉到网格

jquery - 如何替换 CSS/切换大量元素?

ajax - 我如何删除 ?_escaped_fragment_= 使用 .htaccess

jquery - 如何从 2.0 asmx Web 服务返回 JSON

javascript - 单击按钮后 Datetimepicker 不为空?

jquery - 如何摆脱 jquery 布局中的边距

jquery - 在页面加载时保持 Kendo Treeview 的扩展状态