2015-06-09 36 views
0

我有我的頁表是像這樣定義:用的tablesorter,jQuery和動態表問題

<table id="search_table" class="tablesorter table"> 
     <thead> 
      <tr> 
      <th>Title</th> 
      <th>Rank</th> 
      <th>Planning Estimate</th> 
      <th>Update</th> 
     </tr> 
    </thead> 
    <tbody id="search_body"> 
    </tbody> 
</table> 

我該填的表格體:

$('#submit').click(function() { 
     event.preventDefault(); 
     var $table = $('#search_body'); 
     $table.empty(); 
     $.getJSON("/search_issues/" + $("#folders").val(), function(data) { 
      $.each(data, function(index, dict) { 
       var $tr = $("<tr></tr>").appendTo($table); 
       $tr.append("<td>" + dict['title'] + "</td><td>" + dict['rank'] + "</td><td>" + dict['planning'] + 
         "</td><td><a href='/update"+dict['id'] + "'>Update</a></td>"); 
      }); 
     }); 
    }); 

如何以及在哪裏我定義tablesorter?我試圖把這樣的:

$(function() { 
    $("table").tablesorter({ theme : 'blue', sortList: [[2,1],[0,0]] }); 
}); 

但如果我點擊表頭,我得到這個在控制檯:

Uncaught TypeError: Cannot read property '2' of undefined 

感謝,

馬克

+1

嘗試附加TR和TD之後運行的tablesorter ..嘗試收盤後使用它裏面的getJSON $。每個 –

+1

作出答案,我會接受它。那解決了這個問題,謝謝 – Mark

+0

看看答案還有另外一種方法可能也有幫助..好運 –

回答

1

試運行tablesorter追加tr和td後試圖在裏面使用它getJSON關閉後$。每個

$.getJSON("/search_issues/" + $("#folders").val(), function(data) { 
      $.each(data, function(index, dict) { 
       var $tr = $("<tr></tr>").appendTo($table); 
       $tr.append("<td>" + dict['title'] + "</td><td>" + dict['rank'] + "</td><td>" + dict['planning'] + 
         "</td><td><a href='/update"+dict['id'] + "'>Update</a></td>"); 
      }); 
      $("table").tablesorter({ theme : 'blue', sortList: [[2,1],[0,0]] }); 
     }); 
以另一種方式,你可以刷新

排序

你可以看看這個http://tablesorter.com/docs/example-ajax.html

+0

好吧,表格現在正在排序。但是,如果我再次調用.getJSON(使用相同或不同的選定文件夾$('#folders')。val(),然後單擊其中一個標題對錶格進行排序,它會將新數據附加到所以,如果我第一次選擇一個文件夾,我得到4行,我可以排序,但是,如果我然後再次選擇相同的文件夾,並點擊提交,它只顯示4行,但如果我然後嘗試排序,它顯示了8行(每行已被複制) – Mark

+0

@Mark重複與JavaScript無關,它與從另一個文件獲得的數據相關聯到$ .getJSON回調函數,因此您需要清空每個#search_body的html當你改變價值我想嘗試使用$ table.html('');而不是$ table.empty(); –