很多时候使用行内编辑会该操作者带来更清爽的体验
实现bootstrapTable行内编辑:
首先导入相关依赖:
<!--引用BootStrap的JavaScript插件--> <script src="#(basePath)/page/js/jquery.min.js"></script> <script src="#(basePath)/page/js/bootstrap.min.js"></script> <script src="#(basePath)/page/js/bootstrap-table.js"></script> <script src="#(basePath)/page/js/bootstrap-table-zh-CN.js"></script> <!-- 行内编辑 --> <script src="#(basePath)/page/js/bootstrap-editable.js"></script> <script src="#(basePath)/page/js/bootstrap-table-editable.js"></script>
HTML部分:
<table class="table table-hover table-bordered" id="tb_user"> </table>
js部分:
//初始化表格 function initTable() { //先销毁表格 $('#tb_user').bootstrapTable('destroy'); //初始化表格,动态从服务器加载数据 $("#tb_user").bootstrapTable({ url : '#(basePath)/admin/manageUser', //请求后台的URL(*) method : 'post', //请求方式(*) contentType: "application/x-www-form-urlencoded",//一种编码。好像在post请求的时候需要用到。这里用的get请求,注释掉这句话也能拿到数据 striped : true, //是否显示行间隔色 dataField: "rows",//这是返回的json数组的key.默认好像是"rows".这里只有前后端约定好就行 cache : true, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination : true, //是否显示分页(*) sortable : true, //是否启用排序 sidePagination : "server", //分页方式:client客户端分页,server服务端分页(*) pageNumber : 1, //初始化加载第一页,默认第一页 pageSize : 50, //每页的记录行数(*) pageList : [ 50, 100 ], //可供选择的每页的行数(*) search : false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 strictSearch : false, paginationPreText:'上一页', paginationNextText:'下一页', //showColumns : true, //是否显示所有的列 //showRefresh : true, //是否显示刷新按钮 minimumCountColumns : 2, //最少允许的列数 clickToSelect : true, //是否启用点击选中行 uniqueId : "user_id", //每一行的唯一标识,一般为主键列 //showToggle : true, //是否显示详细视图和列表视图的切换按钮 cardView : false, //是否显示详细视图 detailView : false, //是否显示父子表 queryParams:queryParams,//请求服务器时所传的参数 responseHandler:responseHandler,//请求数据成功后,渲染表格前的方法 rowStyle: function (row, index) { //这里有5个取值代表5中颜色['active', 'success', 'info', 'warning', 'danger']; var strclass; if (row.integral_num < 150) { strclass = 'danger'; }else if (row.integral_num > 400) { strclass = 'info'; } else { strclass = ''; } return { classes: strclass } }, onEditableSave: function (field, row, oldValue, $el) { layer.msg(row.integral_num); $.ajax({ type: "post", url: "#(basePath)/admin/giftIntegral", data: { userId:row.user_id, integral:row.integral_num }, success: function (data, status) { if (status == "success") { layer.msg("编辑成功"); } }, error: function () { layer.msg("Error"); }, complete: function () { layer.msg("完成") } }); }, columns : [ { field : 'user_id', align : 'center', title : '编号', valign: 'middle' },{ field : 'tel', align : 'center', title : '电话', valign: 'middle' }, { field : 'user_name', align : 'center', title : '用户名', valign: 'middle' },{ field : 'integral_num', align : 'center', title : '积分', valign: 'middle', editable: { type: 'text', title: '年龄', validate: function (v) { if (isNaN(v)) return '年龄必须是数字'; var age = parseInt(v); if (age <= 0) return '年龄必须是正整数'; } } },{ field : 'register_time', align : 'center', title : '注册时间', valign: 'middle' },{ title : '操作', field : 'user_id', align : 'center', formatter : function(value, row, index) { var e = '<button class="btn btn-default" onclick="edit(\''+ index + '\')">奖励积分</button>'; return e ; }, valign: 'middle' } ], formatLoadingMessage: function () { return "请稍等,正在加载中..."; }, formatNoMatches: function () { //没有匹配的结果 return '<img style="width:100px" src="#(basePath)/page/img/noContent.png">'; }, onLoadError: function (data) { $('#tb_user').bootstrapTable('removeAll'); }, }); } //请求服务数据时所传参数 function queryParams(params){ return { pageSize : params.limit, //每一页的数据行数,默认是上面设置的10(pageSize) pageIndex : params.offset/params.limit+1, //当前页面,默认是上面设置的1(pageNumber) condition : $("#condition").val(),//条件输入框的条件 //param : "Your Param" //这里是其他的参数,根据自己的需求定义,可以是多个 } } //请求成功方法 function responseHandler(result){ //如果没有错误则返回数据,渲染表格 return { total : result.totalRow, //总页数,前面的key必须为"total" rows : result.list //行数据,前面的key要与之前设置的dataField的值一致. }; }