在我的jqgrid中,当我点击添加新记录时,我的日期字段预先填充了当前日期。日期格式为yyyy-MMM-d(例如2010年1月23日)。 日期是必填字段,当我点击提交按钮时,验证失败并显示该日期无效的错误,并且它需要Y-m-d格式。
如何使用jqgrid检查我的值?换句话说,如何在验证2010年1月23日时使jqgrid接受以下日期格式?
感谢。
这是我的JSON数据:
{"rows":[
{"id":1,"cell":["2010-Mar-3","Pepto","2","False","not active"]},
{"id":2,"cell":["2009-May-6","Tylenol","5","False","not active"]},
{"id":3,"cell":["2008-May-6","Aspirin","9","True","active"]}
]}},
这是我的日期列定义:
{ name: 'Date',
index: 'date',
width: '80px',
align: 'center',
sortable: false,
editable: true,
datefmt: 'Y-M-d',
editoptions: { dataInit: function(elem) { $(elem).datepicker({ dateFormat: 'yy-M-d' });},value: getDate } ,
editrules: { required: true, date:true} },
getdate函数将当前日期插入字段。这是功能:
function getDate(){
var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var now = new Date();
return now.getFullYear() + "-" + monthNames[now.getMonth()] + "-" + now.getDate();
}
也许这是因为这个功能?我可以从datepicker插入当前日期吗?
从服务器发送的数据量不是太大(大约10-30行),最多50个人将使用此应用程序,因此不会担心数据量。
如果我在该字段中有2010年6月23日的价值,我会收到错误消息:输入有效日期值 - Y-M-d
答案 0 :(得分:2)
验证您是否在datefmt: 'Y-M-d'
的列定义中定义了colModel
。在editrules
选项列表中(请参阅http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editrules)定义如果您使用date: true
作为editrules
选项,则验证将与{{1}对应选项。
如果在jqGrid中使用日期,还有一些建议:
如果您尚未使用,请考虑datefmt
的{{1}}函数内jQuery.datepicker
的使用情况(请参阅http://jqueryui.com/demos/datepicker/#date-formats)(例如
dataInit
在最简单的情况下)。如果您使用搜索日期字段,则可以editoptions
同样使用editoptions: {
dataInit : function (elem) {
$(elem).datepicker();
}
// ...
}
同样dataInit
(请参阅http://www.trirand.com/jqgridwiki/doku.php?id=wiki:singe_searching#colmodel_options)。在jqGrid中使用jQuery.datepicker
非常简单,但它可以让您的程序更加舒适。
使用标准日期格式化程序(searchoptions
)可以将源数据格式发送到jqGrid转换为将要显示的新格式。例如,
jQuery.datepicker
它不那么有趣,但它可以减少从服务器发送到客户端的数据量。
更新:我必须承认,我没有使用完全符合您的数据格式来测试我的建议。刚才我再测试了一次,然后仔细阅读了关于formatter: 'date'
的jqGrid文档(参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options)。对于formatter: 'date', formatoptions: {srcformat:'y-m-d', newformat: 'Y-M-d' }
,只支持数月格式!因此,日期验证时的值必须采用数字格式。我们能做什么?例如关注
我们定义为datefmt
函数“添加”参数的参数(请参阅http://www.trirand.com/jqgridwiki/doku.php?id=wiki:navigator参数datefmt
),如下所示:
navGrid
因此,我们将prmAdd
字段转换为{ beforeCheckValues: function(posdata, formid, mode) {
var data = posdata.Date;
var dateParts = data.split("-");
var mounth = dateParts[1];
var mounths = $.jgrid.formatter.date.monthNames;
var iMounth = -1;
for (var i=0; i<12; i++) {
if (mounth === mounths[i]) {
iMounth = i;
break;
}
}
if (iMounth !== -1) {
posdata.Date = dateParts[0]+'-'+(iMounth+1)+'-'+dateParts[2];
}
},
beforeSubmit: function(postdata, formid) {
var data = postdata.Date;
var dateParts = data.split("-");
var mounths = $.jgrid.formatter.date.monthNames;
postdata.Date = dateParts[0]+'-'+
$.jgrid.formatter.date.monthNames[dateParts[1]-1]+
'-'+dateParts[2];
return [true,""];
}
}
函数内的数字格式,然后在使用Date
后将所有字段转换回原始格式(如2010年1月23日) 。它会起作用。
现在的主要问题是:我们从这种日期检查中获得了一些优势吗?我们可以不要使用 beforeCheckValues
并在checkDate
函数内部实现我们自己的日期检查。如果我们发现错误的日期,我们应该返回editrules: { date:true }
,我们的自定义错误消息“我的错误消息”将由jqGrid显示。
如果我们可以将日期格式更改为任何数字形式(Y-mm-d,mm / d / Y或其他格式),我们会收到您问题的最简单解决方案。使用beforeSubmit
会使用户格式问题不是很重要。想一想,选择你喜欢的方式。
答案 1 :(得分:1)
我遇到了类似的问题。我已经使用自定义函数进行了验证。我起诉日期格式为'23 -Jan-05'。您可以修改它以适合您所需的日期格式。
function datecheck(value, colname) {
var dateParts = value.split("-");
var datePart = dateParts[0];
var mounth = dateParts[1];
var yearPart = dateParts[2];
var mounths = $.jgrid.formatter.date.monthNames;
var monthPart = -1;
for (var i = 0; i < 12; i++) {
if (mounth === mounths[i]) {
monthPart = i + 1;
break;
}
}
var dateText = monthPart + '-' + datePart + '-' + yearPart;
var date = Date.parse(dateText);
if (isNaN(date))
return [false,"Invalid date. Format expected: dd-mmm-yy. (23-Jul-05)"];
else
return [true,""];
}
JQGrid列详细信息:
colModel: [name: 'JoiningDate', align: "center", editable: true,
editrules: { custom: true, custom_func: datecheck },
formatter: 'date', formatoptions: { srcformat: 'y-m-d', newformat: 'd-M-y' }, edittype: 'text', editable: true,
editoptions: { dataInit: function (el) { setTimeout(function () { $(el).datepicker({ dateFormat: 'd-M-y' }); }, 200); } }
},
希望这有帮助。
此致
Abhilash