jQuery TableSorter仅适用于ID(数字字段),而不适用于其他字段,如文本,日期等

时间:2012-05-03 05:47:46

标签: jquery jquery-plugins tablesorter

在我的Web应用程序中,我维护了用户记录表。在客户端发送时添加和删除记录,而不是用户单击“保存”按钮以保存在服务器上完成的所有操作。

我已将表格分类器应用于表格上的排序功能。但令人惊讶的排序功能只适用于ID字段,即表的第一个字段,但对于所有其他字段,它给出错误(来自chrome的错误跟踪)

Uncaught TypeError: Cannot read property 'type' of undefined
multisortjquery.tablesorter.js:600
$.extend.tablesorter.construct.each.$headers.click.mousedown.onselectstart 

这是表结构。

<table id="contentTable" class="tablesorter">
                        <thead>
                            <tr>
                                <th> ID </th>
                                <th> Name </th>
                                <th> Birth Date </th>
                                <th> City </th>
                                <th id="actionheader"> Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td></td>
                            </tr>
                        </tbody>
                    </table>

在此我动态添加数据。 在这种情况下,排序仅适用于第一个字段,即ID字段

这是我初始化tableSorting的方式。

  function initializeTableSorting() {
        $("#contentTable").tablesorter({
            sortList : [[0, 0]],
            headers : {
                0 : {
                    sorter : "integer"
                },
                1 : {
                    sorter : "text"
                },
                2 : {
                    sorter : false
                },
                3 : {
                    sorter : "text"
                },
                4 : {
                    sorter : false
                }
            }
        });
    }

如果我从初始化中删除false选项,如何让所有字段都能正常工作,甚至也可以用于日期字段?

4 个答案:

答案 0 :(得分:6)

有'完全'相同的问题并且不知道如何解决它,花了一些时间,但最终认为我在tableSorter中为数据提供了一个空行(后面是有效的行)。虽然我可以在HTML中看到有效数据,但在源代码中我错过了一个空的前行......这可能搞砸了TableSorter JS。

删除了开头的空行(在thead之后,但在任何其他数据之前),此问题已解决。

答案 1 :(得分:0)

这确实是一个奇怪的问题,example似乎根本不起作用(在Mac上的Chrome中)。另外,我recreated your situation,再次,错误的排序。虽然,我没有得到你描述的错误。

之前我遇到过TableSorter这个问题,当时无法识别问题。如果我没记错的话,它与插件执行的缓存有关。

答案 2 :(得分:0)

我无法复制报告的错误,但如果我遵循编程逻辑......

您正在描述的错误发生在以下代码行中:

var s = (table.config.parsers[c].type == "text") ...

这意味着parsers[c]不存在。变量c只是列索引。

所以,如果我不得不猜测,我会说有一个自定义解析器,但它没有定义类型属性。

// default text parser
ts.addParser({
    id: "text",
    is: function (s) {
        return true;
    },
    format: function (s) {
        return $.trim(s.toLocaleLowerCase());
    },
    type: "text"
});

或者,它可能是sortList定义的问题。确保变量周围有正确数字的方括号:

var sorting = [[0, 0]];
$("#contentTable").trigger("sorton", [sorting]);

或以压缩形式:

// more than one column -> [[ [0,0], [1,0] ]]
$("#contentTable").trigger("sorton", [[[0, 0]]]);

试用this demo

答案 3 :(得分:0)

刚才这件事发生在我身上。它会对纯数字字段进行排序,但不会通过文本执行任何操作。当我按下这些文本列进行排序时,我在开发工具控制台中返回了“未定义”错误。

修复?结束了我的一个不相关的函数未定义。