【问题标题】:JQueryUI Accordion RedesignJQueryUI 手风琴重新设计
【发布时间】:2011-01-10 16:29:31
【问题描述】:

我正在更改手风琴结构 () 并根据使用 AJAX 的选择进行更改。

问题是,根据手风琴文档,我希望它能够像这样工作

<h3>header</h3>
<div><anything></anything></div>

让 h3 填充标题,div 填充正文,但是当我使用 ajax 动态创建它时,它搞砸了。此代码专门为第一个手风琴框使用了正确的标题,但正文为空,下一个标题变为“没有打开的会话窗口......”这显然不是我想要的。得到的 JSON 在这里:http://benbuzbee.com/trs/json.php?show=sessions&courseid=5

$(function() { 
    $("#courseselect").change(function () {

        $("#testselect").accordion("destroy").html(""); // Empty any previous data
        $("#testselect").css("display", "block"); // Display it if it was hidden

        $.getJSON('json.php?show=sessions&courseid=' + $(this).val(), function(data) {
            for (x in data)
            {
                $("#testselect").append("<h3><a href=\"#\">" + data[x].name + "</a></h3>");
                $("#testselect").append("<div>");
                if (!data[x].sessions)
                    $("#testselect").append("<p>There are no open session windows for this test.</p>");
                for (si in data[x].sessions)
                {
                    $("#testselect").append("<a href=registerconfirm.php?sessionid=\""+data[x].sessions[si].uno+"\">"+data[x].sessions[si].location+"</a>");
                }
                $("#testselect").append("</div>");
            }
            $("#testselect").accordion();
            //$("#testselect").accordion({ change:function(event, ui) {  courseid = ui.newHeader.attr("value"); }
        }); // End getJSON 
     }); // end .change
}); // end $()

【问题讨论】:

    标签: javascript jquery jquery-ui jquery-ui-accordion


    【解决方案1】:

    我想我发现了一些问题。

    你的陈述

    $("#testselect").append("<div>") 
    

    将向#testSelect 附加一个开始和结束标记,如下所示:

     <div id='testselect'><h3><a> </a> </h3><div></div> </div>
    

    对 #testselect 的任何进一步附加都会在 div 标签之后附加元素。

    你的下一个陈述,

    $("#testselect").append("<p>There are no open session windows for this test.</p>");
    

    会这样做

       <div id='testselect'><h3><a></a></h3><div></div><p> There are no open session windows for this test. </p> </div>
    

    你的陈述

    $("#select.").append("</div>") 
    

    不会像您想要的那样将结束 div 标记附加到 #testselect 。相反,它什么也不做。

    你应该把你的 for 循环改成这样:

    for (x in data)
    {
         var $header = $("<h3>").appendTo("#testSelect");
         $header.append("<a href=\"#\">" + data[x].name + "</a>")
         var messageContainer = $("<div>").appendTo($header);
         if (!data[x].sessions)
               messageContainer.append("<p> There are no open session windows for this test </p>");
               for (si in data[x].sessions)
               {
                      messageContainer.append("<a href=registerconfirm.php?sessionid=\""+data[x].sessions[si].uno+"\">"+data[x].sessions[si].location+"</a>");
               }
               $("#testselect").accordion();
    }
    

    【讨论】:

    • 注意它应该是 var messageContainer= $("
      ").appendTo("#testselect") 不是标题,但除此之外非常有帮助,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多