一、效果图
1、引用bootstrap edittable
能接受这个小窗口即可用此功能,官方也是这个接口,文档中写的比较详细,此处不多做解释,博主截图为“若以”框架带的案例,开源框架,复制即可,百度若以即可。(可以不出小窗口,但是还是得√才能输入,还是不够友好)
2、edit (触发事件event不好操作,如果不需要校验即可用此方法,功能不好拓展,社区大神得作品,后续没有继续写了)
理论上此这种功能完美,但是文本校验且和别的单元格得互动比较困难,原作者对此没后后续得维护操作了。
原文:传送门
完整demo下载地址:传送门
3、实现了文本框得编辑,可对文本校验,可以计算合计,也可以影响别的列得值。(丑归丑,需求功能要求复杂,故此操作)
二、代码实现(1、2有文档和demo)思路
可编辑
1、一个普通得 文本框(设置离开事件,自动一下即可)
{
field : 'outPackageNum',
title : '箱数',
valign:'middle',
align:"center",
formatter : function(value, row, index) {
var html = '<input id="outPackageNumIp'+index+'" onblur="checkPckVal('+index+',this.value)" value="'+value+'" width="10" >';
return html;
},
}
2、这个id加index可唯一定位框,作用是:这个文本框得值与bootstrap得数据毫无关系,所以这里输入得数据先检查合法,合法之后就修改row的值,html是以字符串的方式传递的,所以row对象无法传入,因此‘曲线救国’;
定义一个全局变量:
var rowsarr = new Array();
随便找一个列将row对象放进去
在校验方法function checkBoxVal(index,val)
中,给row赋值,rowsarr[index].outPackageNum= val;
到时候提交数据的时候就是这个值,此时输入结束文本框的值不能丢,需要回显一下,文本框的id都有了,回显$("#outPackageNumIp"+index).val(val);
,
bootstrap的的数据,改变了row里面的值,需要显示还得刷新,所以直接合计哪里利用可编辑的input换成 一个思路,赋值$('#xxx').text(val)
;row的合计字段也得更新,同样的方法。
三、列表提交
//获取列表的数据
function getDataArray() {
//是个数组
var data = $('#exampleTable').bootstrapTable('getData');
return data;
}
列表通字段一起提交
//表单数据
var tabledata = $('#signupForm').serialize();
//获取的列表数据
var instoArray = getDataArray();
var batchStocks = JSON.stringify( instoArray ).toString();
var data = tabledata +"&batchStocks="+batchStocks;
ajax提交
data :data,
后台接收:和正常参数一样,列表数据是一个字符串,解析即可
String batchStocks =接收对象.getBatchStocks();
List<对象> list = JSONObject.parseArray(batchStocks, 对象.class);