保存时日期格式错误

时间:2016-02-17 16:15:57

标签: jquery jqgrid free-jqgrid

我需要一些帮助,我创建了一个大部分都适用的网格,除非我编辑行并单击保存;订单日期发生了巨大变化,我没有看到模式来弄清楚如何修复它。我已经更改了srcformatnewformat参数,我还尝试了一大堆不同的东西,所有这些似乎都不起作用。有人可以看看我的小提琴并告诉我那个日期发生了什么事吗?

为了测试小提琴,请选择一行,然后单击编辑(铅笔图标),然后在原因字段中输入数量4和一些乱码,单击保存,查看订单日期,它从默认值更改为一些随机的约会。我正在使用free-jqgrid(4.12.1)

的最新版本

https://jsfiddle.net/y3llowjack3t/8zs1q7Lm/1/

{
    name: 'OrderDate', index: 'OrderDate', width: 90, align: "center",
    search: true, searchoptions: { sopt: ['eq', 'bw', 'bn', 'cn', 'nc', 'ew', 'en'] },
    formatter: 'date', formatoptions: { newformat: 'm/d/Y' },
    editable: true, editrules: { required: true, date: true },
    editoptions: { dataInit: function (elem) { $(elem).datepicker(); } }
},

谢谢!

2 个答案:

答案 0 :(得分:1)

代码中的主要问题是不在日期列中,而是在您使用的aftersavefunc函数中。如果您只是评论回调函数,您将看到免费的jqGrid正确保存数据:https://jsfiddle.net/OlegKi/8zs1q7Lm/3/

我建议您对当前代码进行一些更改。首先,你应该修复rowid。输入数据的RecurringOrderId属性似乎是唯一的。这是rowid值的不错选择。您应该添加localReader: { id: "RecurringOrderId" },因为您使用datatype: "local"

更改后,您不需要使用像

这样的代码片段
var rowData = $('#editFrequencyTable').getRowData(val);
efData = $.grep(efData, function(value, i) {
    return value.RecurringOrderId !== rowData.RecurringOrderId;
});

通过rowid获取数据。而不是所有回调中的rowid已经是RecurringOrderId值,您可以使用$('#editFrequencyTable').getLocalRow(rowid)通过rowid获取数据。方法getLocalRow很快就会getRowData,并且它会获得原始项目的所有属性。因此,您不需要使用任何隐藏的列。您只需从RecurringOrderId中删除列(PONumberEditedcolModel),然后仍然可以访问这些列。

其他一些选项可以刚刚删除loadonce: trueheight: 'auto'datatype: "local",而不是现有gridView: truegridview: true是正确的,但默认为免费jqGrid的)。同样,您可以从所有index项和colModel中删除不需要的search: true媒体资源。

您可以使用jqGrid的navOptionsinlineNavOptionssearchingformDeletinginlineEditing选项来提高代码的可读性。有关详细信息,请参阅the wiki article。结果你得到像

这样的代码

https://jsfiddle.net/OlegKi/8zs1q7Lm/4/

很明显,您可以清理代码并进一步减少代码。使用正确的rowid和getLocalRow后,您可以轻松访问和修改数据。我想你可以自己做。您还可以通过使用列模板来减少colModel的代码。有关详细信息,请参阅the old article

答案 1 :(得分:1)

问题在于您的日期/时间格式。看起来jqGrig期待2016-04-01T00:00:00并且您要回传01/04/2016

修改aftersavefunc以包含:

aftersavefunc: function(iRow, response, options) {

  // ...
  currentRowData.OrderDate = moment(currentRowData.OrderDate).format();
  // ...

}