【问题标题】:Jquery Mobile: dynamically added list with nested item not opening inner list properlyJquery Mobile:动态添加的列表与嵌套项目未正确打开内部列表
【发布时间】:2012-09-28 04:27:41
【问题描述】:

遇到一个奇怪的问题。 这似乎是一个错误。

在 Jquery 移动列表中动态添加带有嵌套列表的列表项。 现在 - 点击新列表项 - 打开新嵌套列表,但也打开它的显示 - 以前的嵌套列表项(添加新之前的最后一个嵌套列表项)

这是小提琴-

http://jsfiddle.net/codenameavi/qSrfv/13/

[在小提琴中使用浏览器后退按钮在嵌套列表和主列表之间导航]

使用此代码动态添加-

$("#addBttn").click(function() {

      // adding a LI with Nested List in Main List
      var li = '<li data-icon="false" data-theme="a"><a>NEW ITEM</a>'

                 + '<ul data-role="listview" data-inset="true" data-theme="h" data-dividertheme="a">'
                     + '<li data-icon="false" data-theme="b">'
                     + '<a>NEW ITEM 1</a></li>'
                     + '<li data-icon="false" data-theme="b">'
                     + '<a>NEW ITEM 2</a></li>'          
                 + '</ul>'

               + '</li>';

    $("#newsListContent").append(li).trigger('create');
    $("#newsListContent").listview('refresh');
});

编辑

是的,这是一个错误。刚刚报告的问题-https://github.com/jquery/jquery-mobile/issues/5098

最新版本也有这个bug。

【问题讨论】:

    标签: jquery list jquery-mobile


    【解决方案1】:

    试试这个,它可以工作:
    编辑:

    var i=1;
    $('#addBttn').click(function() {
    
         // adding a LI with Nested List in Main List
         var li = '<li data-icon="false" data-theme="a">NEW '+i+'</li>';
         $('#newsListContent').append(li);
    
        var ul = '<ul data-role="listview" data-inset="true" data-theme="h" data-dividertheme="a" id="ul_'+i+'">'
                         + '<li data-icon="false" data-theme="b">'
                         + 'NEW ITEM '+i+'</li>'
                         + '<li data-icon="false" data-theme="b">'
                         + 'NEW ITEM '+i+'</li>'          
                     + '</ul>';   
        $('#newsListContent li:last').append(ul).trigger('create');
    
        $('#newsListContent').listview('refresh');
    
        i++;
    });
    

    http://jsfiddle.net/ouadie/prZ9a/1/

    【讨论】:

    • 您好,感谢您的回复。我试过你的代码。但是,动态添加超过 1 个项目,在嵌套页面中创建问题。请看-jsfiddle.net/codenameavi/4jF7m/4
    • 你应该给不同的ID,我加了id="ul_'+i+'",看我的解决方案
    • 我认为最好删除所有&lt;a&gt;&lt;/a&gt; 并为前三个项目提供不同的ID。
    • 没有。这个解决方案没有解决它-jsfiddle.net/codenameavi/4jF7m/5。添加多个 listItem 并检查新的嵌套列表是否冲突。你为什么不分叉小提琴并在那里测试代码!
    • 看这里:jsfiddle.net/ouadie/prZ9a/1 它有效!不会与新的嵌套列表发生冲突。
    【解决方案2】:

    这似乎是一个错误。

    jQM 为您的 li 元素子锚标记添加一个索引号,这些标记与具有相同 data-url 的隐藏页面相关。

    发生的情况是新的 li 元素与列表中的最后一个 li 元素具有相同的编号,这反过来又导致两个页面相互堆叠显示。

    这是食物元素:

    <a href="#list&amp;ui-page=newsListContent-0" class="ui-link-inherit">FOOD</a> 
    

    查看href中附加的索引0,这与隐藏页面有关:

    <div data-role="page" data-url="list&amp;ui-page=newsListContent-0" data-theme="d" data-count-theme="c" tabindex="0" class="ui-page ui-body-d">
        <div data-role="header" data-theme="b" class="ui-header ui-bar-b"
            role="banner">
            <div class="ui-title">FOOD</div>
        </div>
        <div data-role="content" class="ui-content" role="main">
            <ul data-role="listview" data-inset="true" data-theme="d"
                data-dividertheme="a"
                class="ui-listview ui-listview-inset ui-corner-all ui-shadow">
                <li data-icon="false" data-theme="a"
                    class="ui-li ui-li-static ui-body-a ui-corner-top">FOOD ITEM 1</li>
                <li data-icon="false" data-theme="a"
                    class="ui-li ui-li-static ui-body-a">FOOD ITEM 2</li>
                <li data-icon="false" data-theme="a"
                    class="ui-li ui-li-static ui-body-a ui-corner-bottom">FOOD
                    ITEM 3</li>
            </ul>
        </div>
    </div>
    

    具有相同的索引 0。添加新的 li 元素不会更改当前的 li 索引并复制已使用的 0 索引。

    这里是新的 li 元素(href 也指向 food li 元素)

    <a class="ui-link ui-link-inherit" href="#list&amp;ui-page=newsListContent-0">NEW ITEM</a>
    

    这是新的隐藏页面:

    <div data-role="page" data-url="list&amp;ui-page=newsListContent-0" data-theme="h" data-count-theme="c" tabindex="0" class="ui-page ui-body-h">
        <div data-role="header" data-theme="b" class="ui-header ui-bar-b"
            role="banner">
            <div class="ui-title">NEW ITEM</div>
        </div>
        <div data-role="content" class="ui-content" role="main">
            <ul data-role="listview" data-inset="true" data-theme="h"
                data-dividertheme="a"
                class="ui-listview ui-listview-inset ui-corner-all ui-shadow">
                <li data-icon="false" data-theme="b"
                    class="ui-btn ui-btn-up-b ui-btn-icon-right ui-li ui-corner-top"><div
                        class="ui-btn-inner ui-li ui-corner-top">
                        <div class="ui-btn-text">
                            <a class="ui-link-inherit">NEW ITEM 1</a>
                        </div>
                    </div></li>
                <li data-icon="false" data-theme="b"
                    class="ui-btn ui-btn-up-b ui-btn-icon-right ui-li ui-corner-bottom"><div
                        class="ui-btn-inner ui-li">
                        <div class="ui-btn-text">
                            <a class="ui-link-inherit">NEW ITEM 2</a>
                        </div>
                    </div></li>
            </ul>
        </div>
    </div>
    

    即使您更新到最新版本,它仍然是一个问题:

    我用 jQM 创建了一个新问题:

    看起来这以前是个问题,但由于您是动态添加 li 元素,所以我创建了一个新问题

    【讨论】:

    • 感谢您报告错误并使用最新版本进行测试。所以,我通过检查每个主列表项单击来绕过这个问题,它与嵌套列表页面标题的列表文本匹配,仅在该页面添加 ui-page-active。将添加一个简短的答案,关于程序很快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多