最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - jquerymobile refiltering - Stack Overflow

programmeradmin2浏览0评论

I'm using jquerymobile. And on a list I have a filter. When a user types something in it filters great. However when I add more items to the list, then the filtering does not refresh.

Any idea how I can refresh the filtering? (re-filter the list?)

Thanks

I'm using jquerymobile. And on a list I have a filter. When a user types something in it filters great. However when I add more items to the list, then the filtering does not refresh.

Any idea how I can refresh the filtering? (re-filter the list?)

Thanks

Share Improve this question asked Feb 9, 2012 at 15:44 GuyGuy 5,5286 gold badges26 silver badges30 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 5

Trigger a change event on the search input field like this after items are added to list.

$(".ui-input-search .ui-input-text").trigger("change");

A sample:

<html>
<head>

<link rel="stylesheet" href="http://code.jquery./mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://code.jquery./jquery-1.6.4.min.js"></script>
<script>
       $("#btn").live("click",function(){
            $("#list").append("<li><a href='#'>100</a></li><li><a href='#'>200</a></li><li><a href='#'>400</a></li><li><a href='#'>500</a></li><li><a href='#'>1000</a></li>");
            $("#list").listview("refresh");
            $("#page").trigger("create");
            $(".ui-input-search .ui-input-text").trigger("change");
       });
</script>
<script src="http://code.jquery./mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>

</head>

<body>
<div id="page" data-role="page">
<div data-role="header">
    <h1>Test Page</h1>
</div>
<div data-role="content"> 
    <ul id="list" data-role="listview" data-inset="true" data-filter="true">
        <li><a href="#">1</a></li>
        <li><a href="#">12</a></li>
        <li><a href="#">41</a></li>
        <li><a href="#">8</a></li>
        <li><a href="#">91</a></li>
        <li><a href="#">65</a></li>
    </ul>
    <a data-role="button" id="btn">Add more</a>
</div>
</div><!-- /page -->
</body>

</html>

Demo - http://pastehtml./view/bnl7lpe3o.html

Let me know if that helps.

Update for jQuery Mobile 1.4 The filter behavior has been separated out into a filterable widget. You can update your listview content and rerun the filter in one swipe:

$( ".listselector" ).filterable( "refresh" );

A nice benefit of this is that the list items are filtered immediately. You do not experience the visual glitch of seeing the items for a split second before they get filtered, as you would when manually triggering the input control. See http://api.jquerymobile./filterable/#method-refresh

The code above would no longer work, because jQuery Mobile keeps track of the last text entered into the filter, and does not filter if the input has not changed. If you did want to trigger the input control, you would need the following hack to first clear the last entered input:

$(".ui-input-search input").attr('data-lastval', '').trigger("change");

But, please use the filterable function going forward.

I think the problem should be resolved with refresh method, but I am not sure:

$('#mylist').listview('refresh');

After updating the list view, adding the below code will refresh the contents so that it bees visible :

$("#list").listview("refresh");

Besides using the previously mentioned listview refresh, take note that using jQuery's .show() on a listitem will cause display:block; to be added to the element's CSS. Because it takes precedence over jQM's ui-screen-hidden class, it interferes with the searchfilter's ability to hide items when they don't match.

So if you are adding items to the list by way of .show()/.hide() bos, use .css('display','') instead of .show().

My general order for adding new hidden items:

// 1. Clear display:none and display:block, if necessary, from the listitem
$(yourLI).css('display','');
// 2. Apply jQM formatting, such as corners and other CSS, to the entire listview
$(yourListView).listview('refresh');
// 3. Make sure the searchfilter runs on the new items without user intervention
$(".ui-input-search .ui-input-text").trigger("change");
发布评论

评论列表(0)

  1. 暂无评论