jqGrid单元格 - 如何动态设置下拉列表的选定索引并禁用它

时间:2013-05-22 17:16:57

标签: jquery jqgrid

在我的jqGrid中,我有一行有两列。每列包含一个下拉列表。我正在使用内联编辑。在更改第一个下拉列表时,我想在第二个下拉列表中设置一个选定的值并禁用它。这是第一个下拉列表的colModel

{
     name:'pdInstanceType.id', 
     edittype:'select', formatter:'select', editable:true, 
     editoptions:{
         value:"1:Test1;2:Test2",
         dataEvents: [{ 
             type: 'change', fn: function(e) {
                 var valueToSet = 3;
                 var row = jQuery(e.target).closest('tr.jqgrow');
                 var rowId = row.attr('id');
                 var secondSelect = jQuery('#' + rowId + '_stdCellLibrary.id');
                 secondSelect.val(valueToSet);//this is not working
                 //how to disable the secondSelect?
             }
         }]
     }
}

这是第二次下拉列表的colModel

{
    name:'stdCellLibrary.id', 
    edittype:'select', formatter:'select', editable:true, 
    editoptions:{
        value:"3:Test3;4:Test4"
    }
}

2 个答案:

答案 0 :(得分:1)

行。最后,能够弄清楚这一点。从jqGrid单元格中检索选择下拉列表的一种方法是

var secondSelect = jQuery('#' + rowId + '_stdCellLibrary\\.id')[0];

我错过了两件事。使用dot查询id时添加[0]并使用双反斜杠。这是面对同样问题的人的完整解决方案。第二个colModel的定义保持不变。这是第一个colModel

{
    name:'pdInstanceType.id', 
    edittype:'select', formatter:'select', editable:true, 
    editoptions:{
        value:"1:Test1;2:Test2",
        dataEvents: [{ 
            type: 'change', fn: function(e) {
                var valueToSet = 3;
                var row = jQuery(e.target).closest('tr.jqgrow');
                var rowId = row.attr('id');
                var secondSelect = jQuery('#' + rowId + '_stdCellLibrary\\.id')[0];
                jQuery(secondSelect).val(valueToSet);
                //how to disable the secondSelect
                jQuery(secondSelect).attr("disabled", true);
            }
        }]
    }
 }

答案 1 :(得分:0)

要设置第二个选择的值,您应该使用jqGrid的setCell方法(jqGrid wiki methods)。

var rowId = $("#nameOfGrid").jqGrid('getGridParam', 'selrow');
$("#nameOfGrid").jqGrid('setCell', rowId, 'stdCellLibrary.id', valueToSet);

我根据其他列中的值更改禁用列的成功有限。有关详细信息,请参阅this question