【问题标题】:jqGrid searching on formatted datejqGrid搜索格式化日期
【发布时间】:2012-08-01 17:25:50
【问题描述】:

我正在格式化的 jqGrid 中有一个日期列。另外,我有一个工具栏搜索。我遇到的问题是当我在搜索栏中输入数据以搜索格式化的日期数据时,它不会搜索格式化的日期,它可能会搜索预先格式化的日期。

有什么方法可以代替搜索格式化的日期,还是我必须在将数据插入 jqGrid 之前尝试格式化它?

编辑:一些代码

var gridLayout = [
        {name: "name", index: "name", width: "250px"},
        {name: "state", index: "state", width: "50px", hidden: true},
        {name: "stateName", index: "stateName", width: "100px", hidden: true,
            sorttype: function(cellValue, rowObj) {
                return rowObj.state;
            }},
        {name: "stateImg", index: "stateImg", width: "50px", align: "center",
            sorttype: function(cellValue, rowObj) {
                return rowObj.state;
            }},
        {name: "launchDate", index: "launchDate", width: "150px", sorttype: "date",
            formatter: 'date', formatoptions: {srcformat: "ISO8601Long", newformat:"n/j/Y, g:i:s A"}},
        {name: "lastWorked", index: "lastWorked", width: "150px",
            formatter: 'date', formatoptions: {srcformat: "ISO8601Long", newformat:"n/j/Y, g:i:s A"}}
    ];

我在 launchdate/lastworked 元素上方使用工具栏搜索,我正在尝试以“newformat”字段中指定的格式搜索日期,但是当我这样做时它没有回复任何数据。

运行测试后,确实使用旧格式进行搜索。

编辑:

我在这里找到了一个在线示例:http://www.ok-soft-gmbh.com/jqGrid/MarkR.htm

如果您在日期搜索栏中输入 10/31/2007 并按 Enter,则不会出现任何内容。但是,如果您键入 2007-10-31 并按 Enter,则包含单元格 10/31/2007 的行会出现在搜索结果中。这就是我正在努力解决的问题。

编辑:这是 jqGrid 4.4.0,jQuery 1.7.2

【问题讨论】:

  • 您使用哪个版本的 jqGrid?
  • @Oleg 抱歉,应该指定。 jqGrid 4.4.0, jQuery 1.7.2

标签: javascript jquery datetime jqgrid formatting


【解决方案1】:

jqGrid 在本地搜索/过滤期间使用内部函数parseDate。该实现是非常专有的。我在函数中发布了许多错误修复。例如,在the last one 中,我建议进行一些更改以支持您使用的jn 格式。错误修复包含在您使用的当前版本 4.4.0 中。

不幸的是,jqGrid 的当前版本(4.4.0)仍然不支持您使用的格式g。当前仅支持h 格式。要支持g 格式,例如可以包含以下行

if(format[k] === 'g') {
    tsp.h = parseInt(date[k],10);
}

the lineif(date[k] !== undefined) { 之前。

如何在the demo 上看到修改后的代码将起作用:

我在演示中使用的jquery.jqGrid.src.js的固定版本你可以得到here

已更新:写完答案后,我将the following bug report 发布到 trirand。我想告诉大家它现在包含在 jqGrid 的主代码中(参见here)。所以jqGrid的下一个版本(4.4.0之后的下一个)将支持日期格式g

【讨论】:

  • 非常感谢您为此提供的帮助和工作。我还有另一个问题。按照我的设置方式,我想搜索而不必在其中输入完整日期(即输入 10 将显示所有以 10 开头的日期)。由于我是按日期格式化的,而不是按字符串格式化的,我猜这就是为什么只有输入完整的日期/时间才会起作用?我尝试使用 sopt: ['bw'] 但这也没有帮助。再次感谢您提供的所有帮助。
  • 我几乎只是回答了我自己的问题,它必须是,相等,不相等,在,不在,等等。再次感谢。
  • @JoelFischer:不客气!如果您想在过滤器中实现一些简短形式的日期输入,您可以考虑使用beforeSearch 回调(请参阅the answer 以获取可以向您展示实现方式的示例)。
  • 该示例似乎仅适用于过滤器本身,并且由于日期仅允许过滤器,例如等于、不等于、为空等,我不知道如何获得简短的形式投入工作。我可能只是对 jqGrid 的内部工作了解不够。我确信有一种使用 beforeSearch 的方法,但我认为我的知识还不够。
  • @JoelFischer:我同意,在日期间隔中重写应该日期不是很容易。重要的是要了解postData.filters 可以包含groups 属性以及rules 属性。如果您将multipleSearch:truemultipleGroup:truesearching dialog 一起使用,则postData.filters 将设置为here 描述的JSON 格式。所以它是本地过滤支持的最常见的形式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
相关资源
最近更新 更多