2011-12-20 47 views
1

我遇到tablesorter的問題。的錯誤是: N [0]是未定義Tablesorter n [0] undefined

function appendToTable(table,cache) { 

      if(table.config.debug) {var appendTime = new Date()} 

      var c = cache, 
       r = c.row, 
       n= c.normalized, 
       totalRows = n.length, 
       checkCell = (n[0].length-1), 
       tableBody = $(table.tBodies[0]), 
       rows = []; 

      for (var i=0;i < totalRows; i++) { 
       rows.push(r[n[i][checkCell]]); 
       if(!table.config.appender) { 

        var o = r[n[i][checkCell]]; 
        var l = o.length; 
        for(var j=0; j < l; j++) { 

         tableBody[0].appendChild(o[j]); 

        } 

        //tableBody.append(r[n[i][checkCell]]); 
       } 
      } 

以上是從jquery.tablesorter.js 那裏說checkCell =(N [0]。長度 - 1)行的代碼片段是其中發生錯誤。

我不明白如何將未定義的對象傳遞給函數。 tablesorter在我的一個項目中工作正常,但在這個項目上工作不好。

[編輯] 這是用來調用tablesorter的代碼片段。如果我註釋掉tablesorter和tablesorterPager,那麼在我的代碼中沒有別的東西會破壞。

$reviewTable = $("#reviewTable"); 
$reviewTable.tablesorter(); 
$reviewTable.tablesorterPager({ container: $("#pager"), size: 100, widgets: ['zebra'] }); 

下面是客戶端

<asp:Repeater ID="reviewRepeater" runat="server"> 
    <HeaderTemplate> 
     <table cellpadding="0" cellspacing="0" class="MarkAsReceived" id="reviewTable"> 
      <thead> 
       <tr class="even"> 
        <th align="left">Review ID</th> 
        <th align="left">Date Submitted</th> 
        <th align="left">Rating</th> 
        <th align="left">Image</th> 
        <th align="left">ProductId</th> 
        <th align="left">Status</th> 
        <th align="left">Name</th> 
       </tr> 
      </thead> 
      <tbody> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "ReviewId")%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "SubmissionDate")%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "Rating")%></td> 
      <td align="left"><%#hasImage(DataBinder.Eval(Container.DataItem, "ReviewerImages"))%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "ProductId")%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "Status")%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "Nickname")%></td> 
     </tr> 
    </ItemTemplate> 
    <AlternatingItemTemplate> 
     <tr> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "ReviewId")%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "SubmissionDate")%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "Rating")%></td> 
      <td align="left"><%#hasImage(DataBinder.Eval(Container.DataItem, "ReviewerImages"))%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "ProductId")%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "Status")%></td> 
      <td align="left"><%#DataBinder.Eval(Container.DataItem, "Nickname")%></td> 
     </tr> 
    </AlternatingItemTemplate> 
    <FooterTemplate> 
      </tbody> 
     </table> 
     <asp:Label ID="lblEmpty" Text="No Items." runat="server" Visible='<%# reviewRepeater.Items.Count == 0 %>'></asp:Label> 
    </FooterTemplate> 
</asp:Repeater> 

回答

3

如果我沒記錯,你是因爲表最初是空(TBODY)收到這個錯誤。因此,修改的代碼從這個該行:

checkCell = (n[0].length-1), 

這樣:

checkCell = totalRows ? (n[0].length - 1) : 0, 

如果你有興趣,我已經forked並增加了許多增強功能(包括上面的變化)到原來的tablesorter github上的插件。

相關問題