0

在我的 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

4 回答 4

6

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

删除了开始的空行 (在 thead 之后,但在任何其他数据之前),这个问题得到了解决。

于 2012-11-12T10:43:30.830 回答
0

这确实是一个奇怪的问题,该示例似乎根本不起作用(在 Mac 上的 Chrome 中)。另外,我重新创建了您的情况,并且再次排序不正确。虽然,我没有得到你描述的错误。

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

于 2012-05-04T07:13:08.313 回答
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]]]);

试试这个演示

于 2012-05-11T03:14:04.993 回答
0

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

修复?最终使我的一个不相关的功能未定义。

于 2016-04-11T19:41:52.847 回答