5

listview内部にcollapsible動的に追加しています。そして、そのリスト内にネストされたリストを追加しようとしています。<li>ノードをクリックすると、pageinitイベントではなくイベントが発生しclickます。li同じ2 回目のクリックでクリック イベントが発生します。

jsFiddle - http://jsfiddle.net/5zJC5/

HTML:

<body>
<div data-role="page">
    <div data-role="collapsible-set" data-theme="b" data-content-theme="d" id="mainColl"></div>         
</div>
</body>

jQuery:

$(document).ready(function () {
      var ul=$("#mainColl");
      var collapsible= $('<div data-role="collapsible">');
      collapsible.append('<h2>Collapsible</h2>');

      var list = $('<ul data-role="listview" data-divider-theme="b">');
      list.append('<li data-role="list-divider">List</li>');

      for(var j =0;j<4;j++) {
        list.append("<li>Item</li>");
      }
      collapsible.append(list);
      ul.append(collapsible);
      ul.trigger('create');
});

$("#mainColl").on("click","li",function() {
      var list = $("<ul>");
      for(var i=0;i<4;i++) {
        list.append("<li>test</li>");
      }
      $(this).append(list);
      //$(this).trigger('create');
      $(this).parent().listview('refresh');
});
4

1 に答える 1

6

list.append("<li><a href=\"#\">Item</a></li>");の代わりに使用する必要がありlist.append("<li>Item</li>");ます。

ここでjSFiddle を更新しました。

また、jQuery Mobile と組み合わせてドキュメント準備ハンドラーを使用することはお勧めできません。jQM ページに ID を追加し、「pagebeforeshow」イベントのイベント ハンドラーを使用することをお勧めします。

$(document).on('pagebeforeshow', '#page-id', function(){...mycode...});

ここで提案された修正を含む jsFiddle を見つけることができます

最後に、そのような動的なパーツを作成しないことをお勧めします。しばらくすると、コードがごちゃごちゃして読みにくくなることに気付くでしょう。

私の提案は、Undescore.jsをテンプレート エンジンとして使用し、コードを再利用可能でクリーンにすることです。

ネストされたリスト項目にハンドラーを追加するために編集されました:

<!DOCTYPE html>
<html>

    <head>
        <title>jQuery Mobile Nested List</title>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
        <script>
            $(document).on('pagebeforeshow', '#home-page', function () 
             {
                var collapsibleSet=$("#mainColl");
                var collapsible= $('<div data-role="collapsible"></div>');
                collapsible.append('<h2>Collapsible</h2>');

                var list = $('<ul data-role="listview" data-divider-theme="b"></ul>');
                list.append('<li data-role="list-divider">List</li>');

                for(var j =0;j<4;j++)
                {
                    list.append("<li><a href=\"#\">Item</a></li>");
                }
                collapsible.append(list);
                collapsibleSet.append(collapsible);
                collapsibleSet.trigger('create');
             });


            $(document).on("click","#mainColl li",function()
            {
                var list = $("<ul id=\"second-list\"></ul>");
                for(var i=0; i<4; i++)
                {
                    var listItem = $("<li id=\"list-" + i + "\"><a href=\"#\">Test</a></li>").on('click', function(){alert(this.id)})
                    list.append(listItem);
                }
                $(this).append(list);
                $(this).parent().listview('refresh');
            });
        </script>
    </head>

    <body>
        <div data-role="page" id="home-page">
               <div data-role="content">
                   <div data-role="collapsible-set" data-theme="b" data-content-theme="d" id="mainColl">
                   </div>
               </div>
        </div>
     </body>

</html>

これが役立つことを願っています。

于 2013-05-31T21:35:32.023 に答える