2013-04-09 174 views
3

在我的列表視圖中,我有幾個問題列表,現在我試圖做到這一點,當點擊刷新按鈕時,listview中的問題將刷新一個隨機順序。我想知道如果我只刷新頁面的列表部分而不是整個頁面?使刷新功能只刷新頁面的某些部分

<ul id="list" data-role="listview" data-filter="true" data-filter-reveal="true"  data-filter-placeholder="Search Questions..." data-inset="true" ></ul> 
<script> 
var jsonfile = 'data.json'; 
var qData = []; 
var qHint = []; 

$.getJSON(jsonfile, function(data) { 

while (data.activity.length) { 
    var index = Math.floor(Math.random() * data.activity.length); 
    qData.push(data.activity[index].question); 
    qHint.push(data.activity[index].hint); 
     data.activity.splice(index, 1) 
    } 

for (var i = 0; i < 8; i++) { 
    question(qData[i], i); 
    hint(qHint[i], i); 
    $('#text' + (i + 1)).textinput(); 
    $('#submit' + (i + 1)).button(); 
    $('#cancel' + (i + 1)).button(); 

} 

function question(data, i) { 
    $('#list').append('<li><a href=#mypanel'+ (i + 1)+ ' data-icon="arrow-l" data-iconpos="notext" data-shadow="false" data-iconshadow="false" class="ui-icon-nodisc" id="list">'+ data + '</a></li>'); // list item 

} 
function hint(data, i) 
{ 
    $('#mypanel' + (i + 1)).append("<div align='center' style='margin-top:30px;'><font style='font-family:Helvetica, Arial, sans-serif ;color:white;' size='5px' ><b>Question Hint : </b></font></div><br/><label for=text" + (i + 1) + " id=paneltitle"+ (i + 1)+ " style='margin-top:10px;text-align:center;color:white;'>"+ data + "</label>");// panel item 
    $('#paneltitle' + (i + 1)).append('<input type="text" id=text'+ (i + 1) + ' >'); 
    $('#mypanel' + (i + 1)).append('<a href="#header" data-role="button" id=submit'+ (i + 1)+ ' data-inline="true" data-rel="close" data-icon="check" style="margin-left:75px;">Submit</a>'); 
    $('#mypanel' + (i + 1)).append('<a href=#mypanel'+ (i + 1)+ ' data-role="button" id=cancel'+ (i + 1)+ ' data-inline="true" data-rel="close" data-icon="delete2" style="margin-left:75px;">Cancel</a>'); 
} 

//Affected part 
$('#PageRefresh').click(function() { 

      location.reload(); 

}); 

$('#list').listview('refresh'); 
}) 


     <div data-theme="a" data-role="footer" data-position="fixed"> 
      <div data-role="navbar"> 
      <ul> 
       <li><a id="PageRefresh" data-icon="refresh">Refresh</a></li> 
      </ul> 
      </div> 
     </div> 
+0

您可以將ParentNode(目標ID)的DOM ChildrenNodes放入一個數組中,並將其洗牌並將其綁定回父級。 – 2013-04-09 06:15:50

回答

0

這樣做;

JSfiddle

HTML

<ul id="myList"> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    <li>4</li> 
    <li>5</li> 
    <li>6</li> 
</ul> 

<button id="myButton">Click me</button> 

的JavaScript

'use strict'; 

Array.prototype.shuffle = function() { 
    var s = []; 
    while (this.length) s.push(this.splice(Math.random() * this.length, 1)[0]); 
    while (s.length) this.push(s.pop()); 
    return this; 
} 

$(document).ready(function(){ 
    $('#myButton').click(function() { 
     // Get all children of the <ul> 
     var lis = $('#myList').children().get(); 

     // Shuffle the DOM elements (children) in the array 
     lis.shuffle(); 

     // Empty the <ul> list 
     $('#myList').html(''); 

     // Loop the shuffled array of DOM-elements and put them back in the <ul> 
     for (var i = 0; i < lis.length; i++) { 
      $('#myList').append(lis[i]); 
     } 
    }); 
}); 

我用乾淨的例子作爲比較容易理解的演示。我認爲用一個乾淨的例子來理解它比在代碼中完全拋出代碼更容易。

祝你好運!

+0

嗨,謝謝你的回答。 列出的功能正在工作,當我按f5按鈕,但我怎麼能申請按鈕?現在我有一個按鈕,點擊刷新按鈕,它將只刷新列表部分。 – 2013-04-09 06:31:33

+0

而不是$(document).ready(function(),我用$('#PageRefresh')。click(function()? – 2013-04-09 06:33:07

+1

我已經更新了我的答案。需要準備好函數讓jQuery等待頁面內容是完全加載的,這是很常見的做法,我已經在點擊函數中添加了一個HTML示例來回答問題,將所有的jQuery放在就緒函數中是明智的,只有函數和全局變量會在它之外。一個JSfiddle; http://jsfiddle.net/Allendar/gEJsd/ – 2013-04-09 06:34:51