在我的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选项,如何让所有字段都能正常工作,甚至也可以用于日期字段?
答案 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]]]);
答案 3 :(得分:0)
刚才这件事发生在我身上。它会对纯数字字段进行排序,但不会通过文本执行任何操作。当我按下这些文本列进行排序时,我在开发工具控制台中返回了“未定义”错误。
修复?结束了我的一个不相关的函数未定义。