jqGrid:编辑时禁用表单域

我目前正在开发一个专门用于管理自动售货机等的Web应用程序。 我决定在这个项目中使用jQuery,jQuery UI和jqGrid,因此我可以轻松地提供一个高度可定制的用户界面。
不幸的是, jqGrid文档已经过时了,并没有涵盖这个伟大的插件的所有function(因为我真的很喜欢它,即使文档相当差)。

无论如何,我想有足够的背景信息。 让我们谈谈这一点:
我使用内置于jqGrid的导航栏来添加,编辑和删除网格中的项目。
我有一个像魅力一样的工作,除了一件事:一些字段可能只在添加新项目时启用(或可见)而不是在编辑模式时(它们应该被隐藏和/或禁用)。

例:
我正在工作的公司出售自动售货机塔,这些塔有几种类型(不同尺寸和东西)。 将新塔添加到某个位置并输入系统时,必须设置该类型。 但是塔不会随着时间的推移而神奇地改变,因此以后可能无法编辑此字段。

有谁知道是否可以通过更改一些初始化参数来完成此行为?
也许这是一个未记录的编辑选项( editoptions )或表单选项( formoptions )?
或者你可能有一个简单的解决方案吗?

我很想听听你的建议/解决方案!
谢谢=)

您可以通过不同方式实现您的要求。 例如,在beforeShowForm事件内部,您可以隐藏或显示

 jQuery("#list").jqGrid({ colModel: [ { name: 'Name', width: 200, editable: true }, //... }).jqGrid('navGrid','#pager', { edit: true, add: true, del: false}, { // edit option beforeShowForm: function(form) { $('#tr_Name', form).hide(); } }, { // add option beforeShowForm: function(form) { $('#tr_Name', form).show(); } }); 

其中id“tr_Name”由“tr_”前缀和“Name”构成 – 来自colModel的列的name属性。

更新 :在答案和另一个中, 再次展示了如何在初始化编辑之前立即动态更改属性。

更新2 : 免费的jqGrid允许定义editable回调函数或"disabled""hidden""readonly" 。 请参阅Wiki文章 。 它允许更容易地实现相同的要求。

为了使该字段可编辑,这是我在搜索答案一段时间后编写的代码(禁用行内编辑的编辑,但允许在’添加’)并且找不到我需要的答案:

 colModel :[ {name:'id', index:'id', editable:false, ... }).navGrid("#pager",{edit:false,add:true,del:false,search:false,refresh:true}, {}, // edit { beforeInitData: function(formid) { $("#list").jqGrid('setColProp','id',{editable:true}); }, afterShowForm: function (formid) { $("#list").jqGrid('setColProp','id',{editable:false}); }, 

这是一个例子:

http://www.ok-soft-gmbh.com/jqGrid/CustomFormEdit.htm

  beforeShowForm: function(form) { $('#tr_Name', form).hide(); } 

可见但不可编辑:

 { // edit option beforeShowForm: function(form) { $('#col_name', form).attr("disabled", true); } } 

这将适用于免费的jqgrid,简单明了:

此特定示例仅允许以“添加”forms进行编辑:

 editable: function (options) { // Allow edit only for "add" not for "edit" if (options.mode === "addForm") { return true; } else if (options.mode === "editForm") { return false; } else { return false; }