Tablesorter n [0] не определено - PullRequest
       32

Tablesorter n [0] не определено

1 голос
/ 20 декабря 2011

У меня проблемы с табличным сортировщиком. Ошибка: n [0] не определено

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] .length - 1), - это место, где происходит ошибка.

Я не понимаю, как неопределенный объект передается в функцию. Сортировщик таблиц работал нормально в одном из моих проектов, но не работал в этом проекте.

[EDIT] Это фрагмент кода, используемый для вызова сортировщика таблиц. Если я закомментирую tableorter и 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>

1 Ответ

3 голосов
/ 23 декабря 2011

Если я помню, вы получаете эту ошибку, потому что таблица изначально пуста (tbody). Поэтому измените эту строку кода из этого:

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

к этому:

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

Если вам интересно, я разветвил и добавил множество улучшений (включая вышеуказанные изменения) в оригинальный плагин TableSorter на github.

...