1

作为我在 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 完成的,因此下面的正则表达式实际上只是该错误的创可贴。一个更理想的解决方案是在同一个地方进行所有日期验证,但是这种形式的使用不值得投入额外的时间。

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"];
4

1 回答 1

1

您可以查看实现editrules: {date: true}. 这里是几行,这里是内部函数。你会看到它有太多的限制。不支持许多日期格式。例如,不支持标准的“en-us”日期格式(参见'n/j/Y')。$.jgrid.checkDate

所以我建议你最好改用自定义验证。我个人从不使用editrules: {date: true}.

于 2013-05-08T19:10:24.703 回答