2015-03-13 47 views
0

我有一个可折叠内容的列表视图。过滤器会自动展开可折叠内容。这是通过JavaScript完成的。 重置搜索过滤器后,所有项目列表保持展开状态。我怎样才能重置到初始状态(折叠)?启动过滤器后重置jQuery的ListView可折叠内容

下面是代码: JsFiddle

<script> 
    $(document).on('pageinit', function() { 

     $("#iamalist").on('updatelayout', function() { 

      if (($('#iamalist li').length - $('#iamalist .ui-screen-hidden').length) < $('#iamalist li').length) { 
       $('#iamalist li').each(function() { 
        $(this).find('.ui-collapsible-content').removeClass('ui-collapsible-content-collapsed'); 
        $(this).find('.ui-icon-plus').addClass('ui-icon-minus'); 
        $(this).find('.ui-icon-plus').removeClass('ui-icon-plus'); 
       }); 
      } 
     }); 
    }); 
</script> 
<div data-role="content" id="iama"> 
    <ul data-role="listview" id="iamalist" data-inset='true' data-filter="true" data-filter-placeholder="Search term is..."> 
     <li> 
      <div data-role="collapsible" data-inset='false'> 
       <h3>Title</h3> 

       <p>eu</p> 
      </div> 
     </li> 
     <li> 
      <div data-role="collapsible" data-inset='false'> 
       <h3>Title</h3> 

       <p>tu</p> 
      </div> 
     </li> 
     <li> 
      <div data-role="collapsible" data-inset='false'> 
       <h3>Title</h3> 

       <p>voi</p> 
      </div> 
     </li> 
     <li> 
      <div data-role="collapsible" data-inset='false'> 
       <h3>Title</h3> 

       <p>Answer.</p> 
      </div> 
     </li> 
     <li> 
      <div data-role="collapsible" data-inset='false'> 
       <h3>Title</h3> 

       <p>Answer.</p> 
      </div> 
     </li> 
    </ul> 
</div> 

回答

1

您可以在一个功能做到这一点。使用可过滤的widgit's Filter event而不是列表中的更新布局。此事件在每个过滤器操作后触发。在处理程序中检查列表中的类.ui-screen-hidden。如果不存在,请折叠所有可折叠的部分,否则展开它们。

可折叠的小部件有collapseexpand,您可以使用的方法。

$("#iamalist").on("filterablefilter", function(event, ui) {  
    if ($("#iamalist .ui-screen-hidden").length == 0){ 
     $('#iamalist [data-role="collapsible"]').collapsible("collapse"); 
    } else { 
     $('#iamalist [data-role="collapsible"]').collapsible("expand"); 
    }  
}); 

更新FIDDLE