作为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"];
答案 0 :(得分:1)
您可以检查实现editrules: {date: true}
的jqGrid的源代码。这是一些行here和内部函数$.jgrid.checkDate
here。你会发现它有太多的限制。不支持许多日期格式。例如,不支持日期的标准“en-us”格式(请参阅'n/j/Y')。
所以我建议您更好地使用custom validation。我个人从不使用editrules: {date: true}
。