JQGrid Datefmt的行为不符合预期

时间:2013-05-08 18:29:16

标签: jqgrid

作为JQGrid中colModel的一部分,我有以下内容:

{name:'revisedDate', width:220, editable: true, datefmt:'yyyy/mm/dd',edittype:'text',editrules:{date:true, required:true},search:true, stype:'text'}

datefmt和date:true似乎按预期工作,除了一个特例。当前在编辑框中,如果用户输入“2012/04”,jqgrid将其接受为有效日期值,即使它缺少该月的某一天。所有其他不正确的变体都会在表单顶部显示一条错误消息,其中包含以下文本:请输入有效日期值 - yyyy-mm-dd。

我还尝试更改colModel以使用datefmt:'yyyy-mm-dd但没有成功。

我有什么问题吗?我的下一步是推出一个自定义格式化程序,但这似乎是不必要的。

JQGrid的版本:4.3.1

解决方案:我最终在beforeSubmit事件中测试了一个正则字符串,并保留了editrules{date:true}。大部分日期验证都是由内置的datefmt完成的,因此下面的正则表达式实际上只是该bug的创可贴。一个更理想的解决方案是在同一个地方进行所有日期验证,但是这个表单的使用不值得花费额外的时间。

var datePattern = new RegExp(/[0-9]{4}\/[0-9]{2}\/[0-9]{2}/g);
            var revised = $("#revisedDate").val();
            if(!datePattern.test(revised))
            {
                return[false, "Revised Date (YYYY/MM/DD/): Please enter valid date value - YYYY/MM/MM"];
            }
            return [true, "Success"];

1 个答案:

答案 0 :(得分:1)

您可以检查实现editrules: {date: true}的jqGrid的源代码。这是一些行here和内部函数$.jgrid.checkDate here。你会发现它有太多的限制。不支持许多日期格式。例如,不支持日期的标准“en-us”格式(请参阅'n/j/Y')。

所以我建议您更好地使用custom validation。我个人从不使用editrules: {date: true}