【问题标题】:Remove jqGrid editoptions from a Column从列中删除 jqGrid 编辑选项
【发布时间】:2015-12-23 19:41:17
【问题描述】:

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

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

再次,如果我编辑单元格为空白且 dataEvent 绑定到列的行。同样,这是期望的行为。

但是,一旦执行第二个 senerio,即使检查单元格有值,数据事件似乎也会锁定到列。

我的 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);  }},]}});
        }           
    };

【问题讨论】:

    标签: javascript java jquery jqgrid


    【解决方案1】:

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

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

    并使用p.colModel 访问colModel。或者,您可以使用

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

    获取对colModel数组的引用。

    要获取名称为jobno 的列项,可以在free jqGrid 中使用iColByName。那么

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

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

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

    delete cm.editoptions.dataEvents;
    

    【讨论】:

    • 我使用的是 jqGrid 4.6.0。
    • @SteveDyke:那么你可以使用getColumnIndexByName函数代替iColByName。一般来说,我建议您考虑迁移到我开发的更多新版本 free jqGrid 4.11.1,或者迁移到开发 Tony Tomov 的替代 fork Guriddo jqGrid JS 5.0.1。升级与您当前的问题没有直接关系。
    • 我已经下载了 4.12,但是当我查看源代码时,我有几个错误主要出现在默认情况下:代码实例。这是错误消息:此行有多个标记 - 缺少分号 - 已定义默认情况 - 缺少分号
    • @SteveDyke:你能准确点吗?如果你喜欢 free jqGrid 的源代码中的错误,那么请写在哪里,在哪一行?我在免费 jqGrid 的构建中包含了 jshint 和 jscs(参见here),因此不存在诸如 Missing semicolon 之类的错误。如果升级后你的代码有一些问题(一些兼容性错误),那么你可以发布显示问题的演示。我会尽力帮助您解决问题。
    • 抱歉这么久才回复。我不认为这是一个代码错误,但可能是一个错误。在有 switch case 语句的 jqgrid 文件中,我收到一个错误,即默认情况已定义。我正在使用基于 Eclipse 构建的 Webshphere 8.0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多