jquery动态可折叠列表不起作用; jsfiddle的例子

时间:2014-08-19 21:33:16

标签: javascript jquery jquery-mobile

我需要创建一个collapsible-set。该集合中的每个collapsible都包含ul-listview。当我需要将collapsible项动态添加到collapsbile-set时,会出现问题。

我收到错误:

Uncaught Error: cannot call methods on listview prior to initialization; attempted to call method 'refresh' 

这是这个程序的jsfiddle:

http://jsfiddle.net/ezuo3btc/15/

这是索引页面中的初始html:

<div data-role="collapsible-set" data-content-theme="d" id="set">
    <div data-role="collapsible" id="set1" data-collapsed="true">
        <h3>Section 1</h3>
        <ul data-role="listview">
            <li><a href="acura.html">Acura</a></li>
            <li><a href="audi.html">Audi</a></li>
            <li><a href="bmw.html">BMW</a></li>
        </ul>
    </div>
</div>

这是在点击事件中调用的,并动态地将collapsible添加到html中静态定义的collapsible-set

$("#add").click(function() {
    nextId++;
    var content = '\
    <div data-role="collapsible" id="set' + nextId + '">\
        <h3>Section ' + nextId + '</h3>\
        <ul id="listview' + nextId + '" data-role="listview">\
            <li><a href="acura.html">Acura</a></li>\
            <li><a href="audi.html">Audi</a></li>\
            <li><a href="bmw.html">BMW</a></li>\
        </ul>\
    </div>';
    $("#set").append( content ).collapsibleset('refresh');
    $("[data-role=listview]").listview("refresh"); <--------- I get the error here.
    $("[data-role=listview]").trigger("create");
});

如果有人知道如何在折叠中动态初始化列表视图,请告诉我。

提前致谢。

Jenia。

2 个答案:

答案 0 :(得分:2)

您不需要拨打&#34;刷新&#34;方法第一次调用时.listview():

    $("[data-role=listview]").listview();
    $("[data-role=listview]").trigger("create");

http://jsfiddle.net/ezuo3btc/18/

答案 1 :(得分:1)

您需要先使用$element.listview();初始化listview小部件:

$("[data-role=listview]").listview();
$("[data-role=listview]").listview("refresh"); //optional

一些建议:

  • $("[data-role=listview]")适用于data-role=listview的所有元素,甚至是之前创建的元素。喜欢这样的东西:

    var $content = $(content).appendTo($("#set"));
    $("#set").collapsibleset('refresh');
    $content.find("[data-role=listview]").listview();
    $content.find("[data-role=listview]").trigger("create");
    
  • $("#set")始终引用同一节点,您可以将其放在变量

    var $set = $("#set");
    

Example