保存时日期格式错误

Date format wrong on save

我需要一点帮助,我创建了一个网格,除了当我编辑行并单击保存时,大部分情况下都运行良好;订单日期发生了巨大变化,我看不到模式来弄清楚如何解决它。我已经更改了 srcformatnewformat 参数,我还尝试了一大堆不同的东西,但似乎都不起作用。有人可以看看我的 fiddle 并告诉我那个日期发生了什么事吗?

为了测试 fiddle 请选择一行然后单击编辑(铅笔图标)然后在数量和原因字段中输入 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(); } }
},

谢谢!

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

我建议您对当前代码进行一些更改。首先你应该修复rowids。输入数据的 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 方法快得多,它获得原始项目的 所有属性 。因此您不需要使用任何隐藏列。您可以只从 colModel 中删除列(RecurringOrderIdPONumberEdited),并且仍然可以访问这些属性。

一些其他选项可以直接删除 loadonce: trueheight: 'auto'datatype: "local",不存在 gridView: truegridview: true 是正确的,但它是默认值在免费的 jqGrid 中)。以同样的方式,您可以从所有 colModel 项和 search: true.

中删除不需要的 index 属性

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

这样的代码

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

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

问题出在您的 date/time 格式上。看起来 jqGrig 期待 2016-04-01T00:00:00 而你正在传回 01/04/2016.

修改 aftersavefunc 以包括:

aftersavefunc: function(iRow, response, options) {

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

}