jqgrid在dataInit中区分添加和编辑表单

时间:2011-08-07 16:02:05

标签: javascript jqgrid

如何在dataInit事件中区分我是添加新数据还是编辑它?

提前致谢。

1 个答案:

答案 0 :(得分:21)

这是一个很好的问题!来自我的+1。

没有直接的方法来检测dataInit内部是否从“添加”或“编辑”表单调用它。以同样的方式,如果您使用多种编辑模式(如form editinginline editing)和多种搜索模式(advance searching对话框和the searching toolbar),则无法直接检测到使用控件的位置。

作为解决方法,您可以使用以下内容。您可以定义一个变量,您可以在事件内部的不同值中设置该变量,该变量将在强调dataInit之前的添加和编辑表单中调用。告诉你信任你没有那么大的选择。这只是beforeInitData事件。所以你可以这样做

var myGrid = $("#list"),
    inEdit;

$("#list").jqGrid({
    // all parameters of the jqGrid definition
});
myGrid.jqGrid('navGrid', '#pager',
  { del: false, search: false },
  { // Edit
      recreateForm: true,
      beforeInitData: function () {
          inEdit = true;
      }
  },
  { // Add
      recreateForm: true,
      beforeInitData: function () {
          inEdit = false;
      }
  });

我还使用了recreateForm:true属性,以确保在“添加”或“编辑”网格的每个开口处创建新表单并调用dataInit

the demo中,添加表单看起来像

enter image description here

这里“注释”的dataInit只在相应的控件中写入“添加”文本。 “Inv.No”是保存id的字段。 “添加/编辑”表单的相应<input>控件已禁用。因此用户无法进行任何更改。如果是“添加”对话框,方法$.jgrid.randId()将用于生成新的唯一ID值。

相应的编辑表格如下图所示:

enter image description here