Jqgrid 使用“选择框”动态更改列的“可编辑”属性

Jqgrid 使用“选择框”动态更改列的“可编辑”属性,jqgrid,Jqgrid,我正在使用表单编辑。我想根据下拉框中的选择禁用添加和编辑表单中的某些字段。触发此事件的最佳事件是什么?我已尝试使用dataEvents: { name:'type_cd', edittype:'select', editoptions:{ dataUrl:'functions.php', dataEvents:[{ type:'change', fn: funct

我正在使用表单编辑。我想根据下拉框中的选择禁用添加和编辑表单中的某些字段。触发此事件的最佳事件是什么?我已尝试使用dataEvents:

{    name:'type_cd', 
     edittype:'select', 
     editoptions:{
        dataUrl:'functions.php',
            dataEvents:[{
                type:'change',
                fn: function(e){
                    $(this).setColProp('cntrct_id',{
                         editoptions:{editable:false}
                    });
            } 
       }]                        
    } 
},
这对我的表单字段没有明显的影响,但我知道它正在被访问,因为如果我在表单字段中输入一条消息,我可以从中获得一条警告消息

编辑

如果我提交表单,下次打开表单时,设置为editable:false的列将不会出现。这是朝着正确方向迈出的一步,但我希望它立即不可编辑。实际上,我希望它是可见的,但禁用的,即禁用的:true

首先,dataEvents允许您注册对编辑元素的元素的回调。在回调内部,这将被初始化为将被绑定的DOM元素。所以$this在change处理程序中是元素上的包装器,而不是网格上的包装器。$this.setColProp的用法将不正确

要禁用“添加/编辑”表单中的某些输入字段,可以使用以下事实:所有输入元素都获得相同的id,就像colModel中相应列的name属性值一样。因此,如果需要禁用cntrct_id的输入,可以在id=cntrct_id的元素上将disabled属性设置为true

{ 名称:'type_cd', edittype:'选择', 编辑选项:{ dataUrl:'functions.php', 数据事件:[{ 键入:“更改”, fn:功能e{ //禁用列“cntrct\u id”的输入/选择字段 //在编辑表单中 $cntrct_id.propdisabled,true; } }] } } 了解editoptions将用于任何现有编辑模式(表单编辑、内联编辑和单元格编辑),这一点很重要。如果要编写支持所有编辑模式的dataEvents代码,则必须检测编辑模式并使用一些其他编辑字段ID。未测试的代码可能如下所示

{ 名称:'type_cd', edittype:'选择', 编辑选项:{ dataUrl:'functions.php', 数据事件:[{ 键入:“更改”, fn:功能e{ var$this=$e.target,$td,rowid; //禁用列“cntrct\u id”的输入/选择字段 如果$this.hasClassFormElement{ //表单编辑 $cntrct_id.propdisabled,true; }否则{ $td=$this.closesttd; 如果$td.hasClassedit-cell{ //单元编辑 //我们不需要禁用$cntrct\u id //因为在单元编辑模式下仅编辑一个单元 }否则{ //内联编辑 rowid=$td.closesttr.jqgrow.attrid; 如果罗维德{ $++$.jgrid.jqIDrowid++\u cntrct\u id .这是真的; } } } } }] } }
最后一句话。如果您仍然使用jQuery 1.6之前的旧版本的jQuery,而jQuery 1.6不支持此方法,则必须改用。

@Oleg:This is working可以获取警报消息,但不会禁用此字段。
表单字段是否需要任何特殊值?

Oleg,您的答案最重要的一点是,您不仅告诉了解决方案,还解释了其背后的理论。你太棒了。@MattWall:不客气!我很高兴你喜欢我回答问题的方式。我认为理解问题本身比解决问题更重要。我也喜欢Oleg的回答方式,当我开始使用jqgrid时,我从Oleg的回答中得到了大部分与jqgrid相关问题的解决方案。非常感谢。Oleg@Kris:谢谢克里斯!我很高兴我也能帮助你。不客气!这不是答案。试着为这个网站做些贡献,这会给你足够的声誉来评论其他人的答案。@Pravish Jayasundar,更好的办法是,问一个新问题。我不能给上面的问题添加评论,所以我不得不作为答案发布