从列中删除jqGrid编辑选项

Remove jqGrid editoptions from a Column

本文关键字:编辑 选项 jqGrid 删除      更新时间:2023-09-26

在我的jqGrid中,如果列单元格不是空字符串,onSelect函数会在特定列上设置dataEvent。

只要我编辑特定单元格具有值的行,dataEvent就不会在列上设置。这是所需的行为。

同样,如果我编辑一行,其中单元格为空,dataEvent绑定到列。同样,这也是所期望的行为。

然而,一旦执行了第二个senerio,即使检查单元有值,dataevent似乎也锁定在列上。

我的onSelect代码:

function oSelect(id){
var vjobno = "";
vjobno = $("#timesheetlineitemsqueue").getRowData(id)['jobno'];
$("#timesheetlineitemsqueue").setColProp('date', { editoptions: {    dataUrl: '/TimeSheetWebApp/TimeSheetControllerServlet?lifecycle=weekdayoptions'}});
        $("#timesheetlineitemsqueue").setColProp('deptno', { editoptions: { dataUrl: '/TimeSheetWebApp/TimeSheetControllerServlet?lifecycle=departmentoptions'}});              
        $("#timesheetlineitemsqueue").setColProp('iphase', { editoptions: { dataUrl: '/TimeSheetWebApp/TimeSheetControllerServlet?lifecycle=phaseoptions'}});
        $("#timesheetlineitemsqueue").setColProp('icategory', { editoptions: { dataUrl: '/TimeSheetWebApp/TimeSheetControllerServlet?lifecycle=categoryoptions'}});
        if(vjobno == ""){
            $("#timesheetlineitemsqueue").setColProp('jobno', { editoptions: {dataEvents: [{ type: 'click', fn: function(e) {resetvalidation(this.name);  }},{ type: 'focus', fn: function(e) {resetvalidation(this.name);  }},{ type: 'change', fn: function(e) {validatejobnumber(this.value);  }},]}});
        }           
    };

重要的是要理解getGridParam返回对jqGrid使用的内部参数的引用。因此,您可以使用例如

var p = $("#timesheetlineitemsqueue").jqGrid("getGridParam");

以及使用CCD_ 3来访问CCD_。或者,您可以使用

var colModel = $("#timesheetlineitemsqueue").jqGrid("getGridParam", "colModel");

以获得对CCD_ 4阵列的引用。

要获得名称为jobno的列项目,可以在免费的jqGrid中使用iColByName。然后

var cm = p.colModel[p.iColByName.jobno];

如果您使用一些旧版本的jqGrid而不是免费的jqGrid,那么您可以在循环中找到jobno的索引(例如,请参阅答案中的getColumnIndexByName代码)。

现在您可以在不使用setColProp的情况下设置cm项的任何属性。同样,您也可以使用delete删除特性。例如

delete cm.editoptions.dataEvents;