You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jqGrid执行saveRow时保存select文本而非值的问题求助

问题描述

当前使用jqGrid 5.2.1、Java 1.7开发,列配置如下:

editable:true,edittype: "select",
editoptions: {
    dataUrl : '/test.do?cd=abc', 
    cacheUrlData: true,
    buildSelect : function(data) {
        var data = ($.parseJSON(data)).list;
        var s='<select>';

        for(d of data){
            s += '<option value=' + d.comCd + '>' + d.comNm + '</option>';
        }
        s += '</select>';
        return s;
    },
},

执行saveRow后,发现保存的是选项文本d.comNm而非选项值d.comCd;调用var gridData = grid.jqGrid('getRowData'); console.log(gridData);查看数据时也存在同样问题。表格显示正常,但getRowData获取的数据中存储的是选项文本,需要改为存储选项值。

解决方法

1. 修正buildSelect中的option值引号

生成<option>时给value属性值添加双引号,避免因comCd为字符串或含特殊字符导致解析异常:

buildSelect : function(data) {
    var data = ($.parseJSON(data)).list;
    var s='<select>';

    for(d of data){
        // 为value值添加双引号
        s += '<option value="' + d.comCd + '">' + d.comNm + '</option>';
    }
    s += '</select>';
    return s;
},

2. 为列添加formatter: 'select'配置

在列的colModel配置中添加formatter: 'select',让jqGrid明确该列为下拉选择类型,获取数据时优先读取选项值:

{
    name: 'yourColumnName', // 替换为实际列名
    editable:true,
    edittype: "select",
    formatter: 'select', // 新增该配置
    editoptions: {
        dataUrl : '/test.do?cd=abc', 
        cacheUrlData: true,
        buildSelect : function(data) {
            var data = ($.parseJSON(data)).list;
            var s='<select>';

            for(d of data){
                s += '<option value="' + d.comCd + '">' + d.comNm + '</option>';
            }
            s += '</select>';
            return s;
        },
    }
}

3. 额外验证(可选)

  • 确认colModel中该列的name与后台字段名完全一致,避免数据映射错误。
  • 若仍无效,可添加editrules: {edithidden: true}确保编辑时正确识别选项值。

内容的提问来源于stack exchange,提问作者BKK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:35:15