Jquery jqGrid:编辑时禁用表单字段

Jquery jqGrid:编辑时禁用表单字段,jquery,jqgrid,editing,Jquery,Jqgrid,Editing,我目前正在开发一个web应用程序,用于管理自动售货机等。 我决定在这个项目中使用jQuery、jQuery UI和jqGrid,这样我就可以轻松地提供一个很棒的、高度可定制的用户界面。 不幸的是,已经过时了,并且没有涵盖这个伟大插件的所有特性(因为我真的很喜欢它,尽管文档很差) 无论如何,我想有足够的背景资料。让我们开门见山: 我使用jqGrid内置的导航栏从网格中添加、编辑和删除项目。 除了一件事之外,我的这项功能非常有效:某些字段只能在添加新项目时启用(或可见),而不能在编辑模式下启用(应隐

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

无论如何,我想有足够的背景资料。让我们开门见山:
我使用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属性

更新的:In和In显示了在初始化编辑之前如何动态更改属性的另一种方式


更新2:允许将
可编辑的
定义为回调函数或
“禁用”
“隐藏”
“只读”
。看见它允许更容易地实现相同的要求。

要使字段可编辑或不可编辑,这是我在搜索一个答案一段时间后(在行内编辑时禁用编辑,但在“添加”时允许编辑)而没有找到我需要的答案时结束编码的原因:

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});
            },
以下是一个例子:


可见但不可编辑:

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

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

此特定示例仅允许在“添加”表单中进行编辑:


谢谢你的信息。此外,如果要在网格中隐藏列,但要在“添加”或“编辑”窗体中显示,请在colModel中使用hidden:true,在beforeShowForm中使用show()方法。感谢您提供的解决方案。我还有一个小问题:编辑模式表单中的隐藏字段在添加模式表单中设置为必填字段,因此在编辑客户端验证时告诉我:字段是必填字段。@Cargo:抱歉,我无法理解您的问题。你能用别的话问这个问题吗?是否需要更改
editrules
required
属性的值?在展示前的
beforeShowForm
中,您应该能够做到这一点。嗨,Oleg,很抱歉,问题不清楚。我有两个字段:用户名和密码。我希望在添加新行表单中,两个字段都是必需的,在编辑表单中,密码不会出现在表单中(隐藏)。添加工作正常,但在编辑表单时需要填写密码(隐藏字段)。非常感谢。@Oleg在
function(form){
中的参数
form
代表什么?嗨,josemaria,你能告诉我如何添加这个传统信息标签吗?我应该把这个代码放在哪里?谢谢。
{ // edit option
    beforeShowForm: function(form) {
        $('#col_name', form).attr("disabled", true);
    }
}
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;
                            }