JQuery Mobile - ListView - 获取选中项

Posted

技术标签:

【中文标题】JQuery Mobile - ListView - 获取选中项【英文标题】:JQuery Mobile - ListView - Get the selected item 【发布时间】:2012-12-05 04:36:39 【问题描述】:

我已经查看了有关此问题的其他问题,但到目前为止我还无法解决我遇到的问题:

html

        <script type="text/html" id="searchPickPlaceTemplate">
                 <div class="searchpickwhere_box">
                     <ul data-role="listview" data-inset="true"></ul>
                 </div>
         </script>
         <div id="searchPickPlace"></div>

我在这里创建了一个 jsfiddle:http://jsfiddle.net/antaeusa/TLGY7/2/ 因为我动态地将项目添加到列表视图。我还为每个项目提供了一个 ID,以便轻松识别已单击的项目,以便我可以将该值传递到另一个页面。

【问题讨论】:

【参考方案1】:

您的 javascript 和 html 文件中有一些错误。

在 Jquery Mobile 中定义列表视图时,您必须将 data-role="listview" 包含到 ul 的定义中,这样 jquerymobile 就会明白您需要的是列表视图,而不是“普通”列表。

<ul data-role="listview">
  <!-- List Elements -->
</ul>

您遇到的第二个错误是在 html 上没有定义 data-name 属性,而您尝试使用 javascript 获取它。

$('#searchPickPlace ul').children('li').bind('touchstart mousedown', function(e) 
    alert('Selected Name=' + $(this).attr('data-name'));
);

如果所选元素没有定义该属性,这显然不起作用。 所以你必须在html上定义它,像这样:

<div id="searchPickPlace">
    <ul data-role="listview">
        <li data-name="Remuera"><!-- List element content --></li>
        <li data-name="Posonby"><!-- List element content --></li>
    </ul>
</div>​

我修改了您的代码,这里是您问题的完整解决方案,希望对您有所帮助:

http://jsfiddle.net/TLGY7/12/

注意:如果您要向列表视图动态添加更多元素,您必须对添加的每个元素调用$('.selector').listview('refresh'); 方法。这是文档的链接:

http://jquerymobile.com/demos/1.2.0/docs/lists/lists-methods.html

【讨论】:

我不确定将回调绑定到 #restWhere 元素的目的是什么,但对我来说,绑定到 document 元素 pageshow 并没有太多意义每次单击 #restWhere 元素时都会发生事件。如果你这样做,你最终会得到几个pageshows 事件绑定到document 元素,每次用户点击#restWhere 元素时都会添加一个回调。请检查此解决方案jsfiddle.net/fhbjJ/1,并注意其末尾的$("#mylist").refresh("listview");。并确保您查看这本基础书籍:jqfundamentals.com pageshow, 方法是我可以通过 ajax 调用显示所有项目的方式,因为我不知道触发了什么事件但发现了这个:***.com/a/10542821/1238887。我会看看那个。非常感谢。【参考方案2】:

我知道我回答得太晚了,但可能对其他开发人员有帮助。即使我在寻找相同查询时找到了这个链接,最后我找到了一些简单易用的解决方案。

在这里,我使用了静态数组,但我也使用了动态数组,因此您可以轻松检查差异。

我使用自定义列表视图并从 HTML 5 数据库(电话间隙)中检索数据。所以移动开发者可以编写如下代码,

function DB_QuerySuccess(tx, results) 
    console.log("Returned rows = " + results.rows.length);
    var com_id_array = []; // init array     
    var com_name_array = []; // init array
    var com_img_array = []; // init array

    //this will return user_id if user exist else return "no user"
    if (!results.rowsAffected)
    
        for (var index = 0; index < results.rows.length; index++) 
        
            var item = results.rows.item(index);
            var com_id = item.com_id; // company id
            var com_name = item.com_name; // company name
            var com_photo = item.com_photo; // company name
            com_id_array.push(com_id);
            com_name_array.push(com_name);
            com_img_array.push(com_photo);

              $('#ls_com_list').append('<li><img id="com_img" src="'+ com_img_array[index] +'"  /><h3>'+com_name_array[index]+'</h3><p>'+com_id_array[index]+'</p><div align="right"><img src="img/add_icon.png"  /><img src="img/icon-action-close.png"   onclick=\'alert("i am at "+"'+ [index]+'"+" position")\'/></div></li>').listview('refresh');
        
    

因此,当您单击右侧按钮时,会弹出警报并显示当前索引。

我认为 Web 开发人员也可以做同样的事情。

希望对大家有所帮助。

Live Demo : Custom List View Get Code

【讨论】:

以上是关于JQuery Mobile - ListView - 获取选中项的主要内容,如果未能解决你的问题,请参考以下文章

Jquery Mobile + Phonegap 提升 listview 性能

点击事件上的 jQuery Mobile listview 小部件不会为 Mobile 触发

jquery mobile中的listview搜索

添加 ClickListener JQuery Mobile ListView

JQuery Mobile - ListView - 获取选中项

jQuery Mobile:listview('refresh') 应该进入哪个事件?