我有一个 ASP.NET MVC 3 页面。在它上面,我有一个表,我使用 ajax 调用中的 JSON 数据将其转换为 jqGrid。网格具有以下设置:
myGrid = $('#myGrid');
myGrid.jqGrid({
caption: 'My Grid',
datatype: 'local',
data: data.rows,
height: 250,
pager: '#myPager',
viewrecords: true,
colModel: [
...,
{
label: 'blah',
name: 'blah',
align: 'left',
sortable: true,
editable: false,
width: 85,
formatter: 'date',
sorttype: 'date',
datefmt: 'm/d/Y',
formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' }
},
...
]
});
// turn on filter toolbar
myGrid.filterToolbar();
data.rows 从 ajax 调用返回。除了一种以外,这在所有方面都有效。我可以对客户端进行分页、对客户端进行排序,并按除我显示 colModel 的字段之外的每个字段进行搜索。这个“blah”字段是一个日期字段,它以 mm/dd/yyyy 格式正确显示日期。但是,当我在工具栏中输入诸如 11/17/2010 之类的内容并按 Enter 键时,搜索将返回 0 条记录。
所以我深入研究了 jqGrid 代码,以下是它在搜索之前生成的内容:
{"groupOp":"AND","rules":[{"field":"blah","op":"bw","data":"11/17/2010"}]}
最终,当它遍历每一行并评估字段上的操作时,eval(m) && p.push(this) 行,m 是这样的:
(String(this.blah).substr(0,10) == String("11/17/2010"))
基本上,在我看来,它没有识别出该字段是日期。它调用 parse 而不是 parseDate。有人知道如何解决这个问题吗?我知道搜索服务器端很容易,我只需传递该字符串,解析它,然后就可以了。但如果可以的话,我想留在客户端。我能够在 Oleg 和 Tom 提供的一些示例中复制此内容,因此这要么是一个问题,要么是我在配置中遗漏了某些内容...
最佳答案
我发现你的问题很有趣,所以我对你的问题+1。因为您发布了该行
(String(this.blah).substr(0,10) == String("11/17/2010"))
用于eval
在本地搜索过程中我想你会花很多时间来理解本地搜索是如何实现的。因为您看到上面的行(请参阅 (String(this.blah).substr(0,10) ...
)不是应该执行的操作( String(this.blah)
的值将是“2010-11-17”而不是“11/17/2010”),所以您可以覆盖jqGrid 的相应函数( _getStr
中的函数 $.jgrid.from
)并按此方式修复问题。
前段时间我花了很多时间准备了相应的the demo ,它演示了这种技术。该演示已准备为 the answer in trirand forum 。在这个问题中,我们想找到像 'bénevise'
这样的字符串。如果搜索 'benevise'
。因此,必须实现真正自定义的本地搜索。我希望这些信息足以让您解决您所描述的问题。
更新:在我看来,我找到了一个更简单的解决方法。你应该只定义 searchoptions: {sopt: ['eq','ne']}
对于'blah'
具有数据的列。然后"bw"
(开头)不会用于该列。本地搜索中“等于”和“不等于”操作正确。
更新2:Here是我使用 sopt
的工作示例选项。
关于jquery - jqGrid 过滤器或按日期搜索在客户端不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4762645/