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
相关产品推荐
相关产品推荐

