自定义sorttype函数在jqGrid中无法正常工作

我的jqGrid包含一个特殊列,其值由另一个值生成,如“持续时间跨度”列,其实际值以秒为单位,如3690秒,我应该将其转换为格式化字符串“Hour:Minute:Second”,因此是’1:1:30’。 现在,我希望它在排序方面运行良好,所以我编写了一个自定义函数来处理这个问题:

1,以下代码片段是列定义:

{ name : 'time', index : 'time', align: 'center', width : '12%', sorttype : sortTimeFuc } 

2,以下代码片段是sort函数:

 var sortTimeFuc = (function(cell) { var a = cell.split(':'); var value = parseInt(a[2]) + parseInt(a[1]) * 60 + parseInt(a[0]) * 3600; return value; }); 

但它的工作原理不正确如下:

在此处输入图像描述

有人可以帮我吗? 非常感谢。

在我看来,你犯了一些错误。 首先,你应该删除函数的括号。 不需要的括号可以跟随函数的调用。 我在代码中看到的第二个也是最重要的错误是没有第二个参数10的parseInt的使用。最后一个错误是width : '12%'的使用width : '12%' 。 jqGrid不支持宽度内的’%’。 而不是你可以只使用width: 12并指定总网格的width或使用autowidth: true 。 因为选项shrinkToFit: true是默认选项,如果将遵循根据列的jqGrid和width属性的总宽度缩放列的宽度,这将定义列之间的比例。

因此,生成的代码可以如下所示

 { name: 'time', align: 'center', width: 12, sorttype: function (cell) { var a = cell.split(':'); return parseInt(a[2], 10) + parseInt(a[1], 10) * 60 + parseInt(a[0], 10) * 3600; } } 

请参阅答案,作为自定义排序非常接近实现的示例。

由于合并的时间字符串符合字符串的排序条件,因此只需将此列的sorttype设置为“text”即可。 问题解决了。