jqgrid 同列不同行的<select>不相同
如图下所示:

简述原理:设置好表格 所需的字段变量以及字段属性,从后台获取j数据后,在js文件中把数据组合成json格式的字符串,利用字段属性把json数据转换成select,就能实现同列不同行select不同内容。
1、设置colNames与colModel,js代码如下:
colNames: ['全部商品单位','商品单位标识','商品单位比例值','商品基础单价','商品单位'']
colModel: [{
name:'unitData',hidden:true},{name:'unit_id',hidden:true},{name:'scale_value',hidden:true
},{name:'old_price',
hidden:true},{name:'unit',index:'unit',align:'center',
editable:true,edittype:'custom', editoptions:{custom_element: myelem, custom_value:myvalue},width:150, sortable:false}]
2、js获取到的后他数据对格式进行转换,转成json格式的字符串,js代码如下:
for (var i = 0; i < arr.length; i++) { //arr是从后台获取的数据
rows_info['unit'] = arr[i].unit.info.name; //商品单位,用于显示默认的单位
rows_info['old_price'] = arr[i].buy; //商品基础单价,用于记住默认的单位对应的单价
rows_info['unit_id'] = arr[i].unit.ape; //商品单位id,用于记住当前所选的单位id,后面有用
rows_info['scale_value'] = arr[i].unit.info.scale_value; //商品单位比例值,用于记住当前所选的单位与默认单位的换算值
var unitData = arr[i].unitData;//后台获取的该商品的全部单位数据
var json = '[';
for (var j = 0; j < unitData.length; j++) {
json += "{'id':"+ unitData[j].id
+",'name':'"+unitData[j].name+"','scale_value':'"+unitData[j].scale_value+"'},";
}
json = json.slice(0,-1);
json += "]";
rows_info['unitData'] = json; //全部商品单位,转换成json格式的字符串
}
3、colModel 单位属性的函数,js代码如下:
//触发产生相对应的单位select,还有另一种方法(在最后注释的部分)
function myelem(value, options) {
var row_id = $("#table").jqGrid('getGridParam','selrow');
var row = $("#table").jqGrid('getRowData',row_id);//获取当前行数据
var el = document.createElement("select");
var unitData = row.unitData;
if(unitData!=null&&unitData.length>0)
{
var optvalues = eval(unitData);//html形式的全部单位信息转换成js数据
console.log(optvalues);
for(var i in optvalues){
var optvalue = optvalues[i].id; //该单位id
var optdisplay = optvalues[i].name;//该单位名
var optlabel = optvalues[i].scale_value;//该单位对于默认单位的比例值(换算值)
var optel = document.createElement("option");
optel.innerHTML = optdisplay;
optel.value = optvalue;
optel.title = optlabel;
el.appendChild(optel);
}
}
return el;
}
//选中单位后触发改变已记住的单位id、单位比例值(两者在存储的时候有用)
function myvalue(elem, operation, value) {
var row_id=$(elem).context.id;
// var unit_id = $(elem).find("option:selected").val();
var unit_id = $(elem).val();
var scale_value = $(elem).find("option:selected").attr('title');
$("#table").jqGrid('setCell',row_id,'unit_id',unit_id);//设置单位Id
$("#table").jqGrid('setCell',row_id,'scale_value',scale_value);//设置单位比例值
var old_price = $("#table").jqGrid('getCell',row_id,'old_price');//获取商品基础单位时的单价
$("#table").jqGrid('setCell',row_id,'price',(old_price-0)*(scale_value-0));//设置该单位的单价,基础单价乘以比例值
return $(elem).find("option:selected").text();
}
//此方法缺点:ajax必须同步请求,请求时间过长,造成编辑的单元格变化缓慢
// function myelem(value, options) {
// var row_id = $("#table").jqGrid('getGridParam','selrow');
// var row = $("#table").jqGrid('getRowData',row_id);//获取当前行数据
// var html="<select>";
// $.ajax({
// type:'post',
// url:"xxx",
// async: false, //同步
// data:{"id":row.set_id},
// success(re){
// for (var i = 0; i < re.length; i++) {
// html += "<option value='"+re[i].id+"'>"+re[i].name+"</option>";
// }
// html += "</select>";
// }
// });
// return html;
// }
jqgrid 同列不同行的<select>不相同的更多相关文章
- jqGrid选择列控件向右拖拽超出边界处理
jqGrid选择列控件向右拖拽超出边界处理 $("#tb_DeviceInfo").jqGrid('navButtonAdd', '#jqGridPager', { ...
- jqGrid冻结列
jqgrid冻结列 冻结列:就是横向移动表格时,让某一列保持不动 做法: 1.colModel的行要加上属性: frozen:true.注意:冻结列必须从第一列开始,包括隐藏列 2.加载jqgrid后 ...
- jqGrid动态列
HTML代码: <div id="divList"> <div class="toolbar"> </div> <ta ...
- jqgrid表格列动态加载的实现
选中几个测点名,在表格中就显示几列. 具体代码如下: function reloadGrid(postData){ $('#gridTable').jqGrid('GridUnload'); var ...
- Jqgrid 序号列宽度调整
// 遍历jqgrid 使其序号列宽度为45 function setwidth() { $("table[role='grid']").each(function () {//j ...
- jqgrid操作列循环显示三个按钮
首先ajax取数据 $.ajax( { type: "get", url: "../../MECManage/TJYY/collect", cache: fal ...
- jqgrid 将列头设置为超链接或按钮
有时,需要将某个列头设置为超链接或按钮,点击超链接或按钮能够跳转至其他页面(或执行一个事件操作). 可以把 label 值设置成一个a标签或button 代码如下: colModel: [{ labe ...
- jquery如何判断表格同一列不同行input数据是否重复
function hasRepeat(objId,columnIndex){ var arr = []; $("#"+objId+" tbody tr").ea ...
- jqgrid 设置冻结列
有时,jqgrid表格的列非常多,而表格的宽度值是固定的,我们需要在表格底部出现滚动条,并且固定前面几个列作为数据参照项,如何实现? 需要用的jqgrid冻结列,步骤如下: 1)设置需要冻结的列属性, ...
随机推荐
- java线程优先级
java的线程优先级分为1-10 这10个等级 1为最强,最优先 10为最弱 如果大于10或者小于1则会抛异常 源代码为: public final void setPriority(int newP ...
- No new migrations found. Your system is up-to-date.处理
显然是migrations表中存储的相关操作记录了,删除就好了!!!
- 高并发WEB网站优化方案
一.什么是高并发在互联网时代,所讲的并发.高并发,通常是指并发访问,也就是在某个时间点,有多少个访问同时到来.比如,百度首页同时有1000个人访问,那么也就是并发为1000.通常一个系统的日PV在千万 ...
- Linux下添加自定义脚本到开机自启动,标准rpm,举例:设置Apache自启动
写一个脚本,名字为:autostart.sh,放在/etc/init.d/目录下,赋予权限chmod +x /etc/init.d/autostart.sh 代码如下 #!/bin/sh #chkco ...
- J2EE和android的GZIP测试
使用GZIP进行数据压缩传输实验,服务端是J2EE,使用HTTP的POST方式进行数据请求. 为了方便测试,刚开始在J2EE的环境下写了一个TestCase去调用J2EE写的服务,忘记写GZIP解压代 ...
- hdu4825 01字典树+贪心
从高位向低位构造字典树,因为高位得到的数更大. AC代码: #include<cstdio> using namespace std; typedef long long LL; cons ...
- ARC068E - Snuke Line
原题链接 题意简述 给出个区间和.求对于任意,有多少个区间包含的倍数. 题解 考虑怎样的区间不包含的倍数. 对于的倍数和,满足的区间不包含任何的倍数. 于是转化为二维数点问题,可以用可持久化线段树解决 ...
- Appium安卓真机环境搭建
说明 步骤可能比较简洁,因为手头上有安卓测试机,所以需要配置虚拟机的童鞋请去虫师博客园,因为我也是从那儿学的,哈哈.点我飞到虫师那儿 但是如果你要搭建真机测试环境的话,本教程将是最简单实用的. 1. ...
- Web自动化之Headless Chrome测试框架集成
使用Selenium操作headless chrome 推荐 简介 WebDriver是一个W3C标准, 定义了一套检查和控制用户代理(比如浏览器)的远程控制接口,各大主流浏览器来实现这些接口以便调用 ...
- 流处理与消息队列------《Designing Data-Intensive Applications》读书笔记16
上一篇聊了聊批处理的缺点,对于无界数据来说,流处理会是更好的选择,"流"指的是随着时间的推移逐步增加的数据.消息队列可以将这些流组织起来,快速的在应用程序中给予反馈.但是消息队列与 ...