2011-03-03 54 views
3

我有一個SELECT元素在我的一個jQuery Mobile頁面上有很多可能的值。很顯然,在頁面加載時加載所有選項會增加手機的性能問題。什麼是「按需」加載項目的好方法?延遲加載SELECT元素選項w/jquerymobile,c#和asp.net

什麼,我需要一個例子是如何在Android市場的負載應用列表:項目x個負載開始,那麼x多個項目加載,一旦你已經滾動到選項的底部,則x更多...和等等)。

我使用C#/ ASP.NET(剃刀語法)來實現jQuery Mobile的。

回答

5

這是我的解決方案。這個想法是實現一種類似Twitter的分頁,並且你應該從一開始就做出一些選擇。

<div data-role="page"> 

    <div data-role="header"> 
     <h1>Page Title</h1> 
    </div><!-- /header --> 

    <div data-role="content"> 
     <p>Page content goes here.</p> 

     <div data-role="fieldcontain"> 
      <label for="select-choice-1" class="select">Choose shipping method:</label> 
      <select name="select-choice-1" id="select-choice-1"> 
       <option value="standard">Standard: 7 day</option> 
       <option value="rush">Rush: 3 days</option> 
       <option value="express">Express: next day</option> 
       <option value="overnight">Overnight</option> 
       <option value="-1">More...</option> 
      </select> 
     </div> 

     </div><!-- /content --> 

    <div data-role="footer"> 
     <h4>Page Footer</h4> 
    </div><!-- /footer --> 
</div><!-- /page --> 

然後勾一些處理程序的更多選項

<script type="text/javascript"> 
    $(document).bind("pageshow", function(){ 
     bindMore(); 
    }); 

    function bindMore(){ 
     // The rendered select menu will add "-menu" to the select id 
     $("#select-choice-1-menu li").last().click(function(e){handleMore(this, e)}); 
    } 

    function handleMore(source, e){ 

     e.stopPropagation(); 

     var $this = $(source); 

     $this.unbind(); 

     $this.find("a").text("Loading..."); 

     // Get more results 
     $.ajax({ 
      url: "test.js", 
      dataType: "script", 
      success: function(data){ 
       $(eval(data)).each(function(){ 

        // Add options to underlaying select 
        $("#select-choice-1 option").last() 
         .before($("<option></option>") 
         .attr("value", this.value) 
         .text(this.text)); 

       }); 

       // Refresh the selectmenu 
       $('#select-choice-1').selectmenu('refresh'); 

       // Rebind the More button 
       bindMore(); 

      } 
     }); 
    } 
</script> 

Test.js包含此:

[ 
     {"value": "1", "text": "1"}, 
     {"value": "2", "text": "2"}, 
     {"value": "3", "text": "3"} 
] 
+0

這是一個良好的開端。你只是得到了一個賞金。謝謝! – 2011-03-08 14:00:35

+0

@Chris謝謝!很高興我能幫上忙! – jimmystormig 2011-03-08 14:57:32