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

时间:2013-02-19 17:49:26

标签: jqgrid

我正在使用表单编辑。我想根据下拉框中的选择禁用我添加和编辑表单中的某些字段。什么事件最好用来触发这个?我试图使用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)

2 个答案:

答案 0 :(得分:4)

首先,dataEvents允许您在编辑元素的元素上注册回调。回调内部this将初始化为将被绑定的DOM元素。因此$(this)处理程序内change它将是<select>元素上的包装而不是网格上的包装。 $(this).setColProp的使用不正确。

要在“添加/编辑”表单中禁用某些输入字段,您可以使用以下事实:所有输入元素与id中相应列上的name属性的值相同colModel cntrct_id 。因此,如果您需要停用disabled的输入,则可以使用true

在元素上将id="cntrct_id"属性设置为{ name: 'type_cd', edittype: 'select', editoptions: { dataUrl: 'functions.php', dataEvents: [{ type: 'change', fn: function (e) { // disable input/select field for column 'cntrct_id' // in the edit form $("#cntrct_id").prop("disabled", true); } }] } }
editoptions

了解dataEvents将用于任何现有的编辑模式(表单编辑,内联编辑和单元格编辑)非常重要。如果要编写支持所有编辑模式的{ name: 'type_cd', edittype: 'select', editoptions: { dataUrl: 'functions.php', dataEvents: [{ type: 'change', fn: function (e) { var $this = $(e.target), $td, rowid; // disable input/select field for column 'cntrct_id' if ($this.hasClass("FormElement")) { // form editing $("#cntrct_id").prop("disabled", true); } else { $td = $this.closest("td"); if ($td.hasClass("edit-cell") { // cell editing // we don't need to disable $("#cntrct_id") // because ONLY ONE CELL are edited in cell editing mode } else { // inline editing rowid = $td.closest("tr.jqgrow").attr("id"); if (rowid) { $("#" + $.jgrid.jqID(rowid) + "_cntrct_id") .prop("disabled", true); } } } } }] } } 代码,则必须检测编辑模式并使用其他一些编辑字段。代码(未经测试)可以大致如下

{{1}}

最后一句话。如果您仍然使用不支持prop方法的旧版jQuery(在jQuery 1.6之前),则必须使用attr

答案 1 :(得分:-1)

@Oleg:这是有效的(可以获取警报消息),但它不会禁用该字段。 表单字段是否需要任何特殊值?