实战Flask+BootstrapTable后端传javascript脚本给前端实现多行编辑(ajax方式)

相信看到此文的朋友们一定会感到庆幸,总之我是用了两天死磕,才得到如下结果,且行且珍惜,祝好各位!

话不多说,有图有源码

1.看图

2.前端实现页面

<!DOCTYPE html>
{% from "common/_macro.html" import static %}
<html>
<meta charset="utf-8">
<head>
<!-- 引入bootstrap样式 -->
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css" />
<!-- 引入bootstrap-table样式 -->
<link rel="stylesheet" href="/static/bootstrap-table-develop/bootstrap-table.min.css" />
<!-- layer -->
<link rel="stylesheet" href="/static/layer/2.4/skin/layer.css" />
<!-- jquery -->
<script type="text/javascript" src="/static/js/jquery-2.2.0.min.js" ></script>
<!-- bootstrap -->
<script type="text/javascript" src="/static/bootstrap/js/bootstrap.min.js" ></script>
<!-- bootstrap-table -->
<script type="text/javascript" src="/static/bootstrap-table-develop/bootstrap-table.min.js" ></script>
<!-- 引入中文语言包 -->
<script type="text/javascript" src="/static/bootstrap-table-develop/locale/bootstrap-table-zh-CN.min.js" ></script>
<!-- layer -->
<script type="text/javascript" src="/static/layer/2.4/layer.js" ></script></head>
<body class="gray-bg"><h1 align="center">Bootstrap-Table 多行编辑保存</h1><div class="wrapper wrapper-content "><div class="col-sm-12"><div class="ibox"><div class="ibox-body"><table id="exampleTable"></table><button type="button" id="butSave" class="btn btn-primary col-sm-1 col-sm-offset-5" onclick="save()">保存</button></div></div></div></div><div ></div>
</body>
</html>
<script>var prefix = "/hellotableeditrowssave";var $table = $('#exampleTable');
$(function() {var loadData = [];var tableColumns = [];initTable();ajaxTable('/hellotableeditrowssave/ajaxlist');function initTable() {$table.bootstrapTable({toolbar: '#toolbar',clickEdit: true,showToggle: true,pagination: true,       //显示分页条showColumns: true,showPaginationSwitch: true,     //显示切换分页按钮showRefresh: true,      //显示刷新按钮//clickToSelect: true,  //点击row选中radio或CheckBoxcolumns: tableColumns});}function ajaxTable(url){//debugger;$.ajax({url: url,type: "GET",dataType: "json",success: function(rs){console.log(rs)loadData = rs.data.rows;tableColumns = eval(rs.data.columns);//JSON.parse(rs.data.columns);//'('++')'$table.bootstrapTable('refreshOptions',{columns: tableColumns,data: loadData,});//-----隐藏id列//$table.bootstrapTable('hideColumn','id');},error: function(rs){console.log(rs)}});}});//对象转json字符串
function objTostr(obj){if( typeof(obj)!=='object'  ){return obj;}var temp=Object.assign({},obj);return JSON.stringify( temp).replace(/"/g, '&quot;');
}
//行编辑数据更新到table中
function editRow(index,field,value,row){alert("修改了id="+row.id+" 字段名: ["+field+"] 的内容:['"+value+"']");var rows = {index : index, //更新列所在行的索引field : field, //要更新列的fieldvalue : value //要更新列的数据};//更新表格数据$("#exampleTable").bootstrapTable("updateCell",rows);
}function save(){var rows = $table.bootstrapTable('getSelections');if (rows.length == 0) {alert("请选择要保存的记录!");return;} else {var params = JSON.stringify(rows);$.ajax({url : '/hellotableeditrowssave/update',type : 'POST',data : params,contentType:'application/json;charset=utf-8',dataType:'JSON',cache : false,success : function(data) {layer.msg(data.data.msg);}});}
}
</script>

3.后端内容

#=============================================================
#---------------------阿桂天山 Ewangda--------------------------
"""
Bootstrap-table 动态多行编辑保存
"""
@app.route('/hellotableeditrowssave', methods=['GET','POST'])
def hellotableeditrowssave():return render_template('/hello_tableeditrowssave.html')@app.route('/hellotableeditrowssave/ajaxlist', methods=['GET','POST'])
def hellotableeditrowssave_ajaxlist():columns = """[{'checkbox': true}, {'field': 'id','title': 'Item ID'}, {'field': 'name1','title': 'Item Name'}, {'field': 'price','title': 'Item Price'},{'field': 'goods','title': '商品', 'formatter': function(value, row, index, field) {  if (row['goods'] == "" || row['goods'] == null){value = "";} else { value = row['goods']; } var abc = "hahaha"; return '<input class="form-control" value="'+value+'" name="goods" type="text" onblur="editRow(\\''+index+'\\',\\'goods\\',this.value,'+objTostr(row)+');">';}}]"""datas = [{ "id": 11, "name1": "gtj", "price": "¥11", "goods": "玩具小车" },{ "id": 22, "name1": "Ewangda", "price": "¥22", "goods": "遥控赛车"  },{ "id": 31, "name1": "小柘服务", "price": "¥32", "goods": "翻斗车"  }]data = {'columns' : columns,'rows' : datas}totalNum = 3return restful.success(data=data) #{'total': totalNum, 'data':datas}) #@app.route('/hellotableeditrowssave/update', methods=['GET','POST'])
def hellotableeditrowssave_update():result = request.get_json()num = len(result)ids =[]for row in result:print(row['id'],row['goods'])ids.append(row['id'])# print(result)data ={'msg': "成功修改{0}条记录:ids={1}".format(num,ids)}return restful.success(data=data)
#=============================================================

就这些了,如果你有更好的方法,望不吝赐教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/234054.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

台灯到底对眼睛好不好?推荐高品质的护眼台灯

其实只要我们挑选一盏专业的台灯&#xff0c;并且正确的使用&#xff0c;那么台灯对眼睛是有很大的好处的&#xff01;如今夜间工作、学习已然成为了再常见不过的事情&#xff0c;在夜间最大的痛点就是光照不足&#xff0c;如果单靠室内灯是远远不足的&#xff0c;而且光线的分…

超融合可以“既要又要还要”吗?青云云易捷给出新选择

科技云报道原创。 超融合作为一种云时代的IT基础架构&#xff0c;诞生已有十余年&#xff0c;如今已是一种非常成熟且主流的应用。 多年的技术发展和市场需求的快速增长&#xff0c;让超融合成了一个非常“卷”的市场&#xff0c;云服务商、HCI创业公司、综合IT供应商&#x…

Java 数据结构篇-用链表、数组实现栈

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 栈的说明 2.0 用链表来实现栈 2.1 实现栈 - 入栈方法&#xff08;push&#xff09; 2.2 实现栈 - 出栈&#xff08;pop&#xff09; 2.3 实现栈 - 查看栈顶元素…

【JavaWeb】会话过滤器监听器

会话&过滤器&监听器 文章目录 会话&过滤器&监听器一、会话1.1 Cookie1.2 Session1.3 三大域对象 二、过滤器三、监听器3.1 application域监听器3.2 session域监听器3.3 request域监听器3.4 session域的两个特殊监听器3.4.1 session绑定监听器3.4.2 钝化活化监听…

MSUSB30模拟开关可Pin to Pin兼容FSUSB30/SGM7222

MSUSB30/MSUSB30N 是一款高速、低功耗双刀双掷 USB 模拟开关芯片&#xff0c;其工作电压范围是1.8V 至5.5V。可Pin to Pin兼容FSUSB30/SGM7222。其具有低码间偏移、高通道噪声隔离度、宽带宽的特性。 MSUSB30/MSUSB30N 主要应用范围包括&#xff1a;具有 USB2.0 接口的手持设备…

小程序禁止二次转发分享私密消息动态消息

第一种用法&#xff1a;私密消息 私密消息&#xff1a;运营人员分享小程序到个人或群之后&#xff0c;该消息只能在被分享者或被分享群内打开&#xff0c;不可以二次转发。 用途&#xff1a;主要用于不希望目标客群外的人员看到的分享信息&#xff0c;比如带有较高金额活动的…

在java java.util.Date 已知逝去时间怎么求年月日 数学计算不用其他方法

在Java中&#xff0c;使用java.util.Date类已知逝去时间求年月日的方法如下&#xff1a; 首先&#xff0c;获取当前时间和逝去时间之间的毫秒数差值&#xff0c;可以使用Date类的getTime()方法获得时间戳。 将毫秒数转换为秒数&#xff0c;并计算出总共的天数。 根据总共的天…

消除笔怎么用?手把手教你一键智能消除杂物

消除笔怎么用&#xff1f;消除笔是一种非常实用的工具&#xff0c;可以帮助我们快速修复图片中的小问题。无论是想要消除照片中的路人还是进行一些修改&#xff0c;消除笔都可以轻松地帮助我们实现。 以下是使用消除笔的步骤&#xff1a; 1、打开水印云软件&#xff0c;并在工具…

ProgrammingError: nan can not be used with MySQL

该错误怎么发生的&#xff1f; 我们先在本地创建测试表&#xff1a; CREATE TABLE users_test (id int NOT NULL AUTO_INCREMENT COMMENT 主键,trade_account varchar(50) DEFAULT NULL COMMENT 交易账号,username varchar(50) DEFAULT NULL,email varchar(100) DEFAULT NULL…

大数据HCIE成神之路之数学(4)——最优化实验

最优化实验 1.1 最小二乘法实现1.1.1 算法介绍1.1.2 代码实现1.2 梯度下降法实现1.2.1 算法介绍1.2.2 代码实现1.3 拉格朗日乘子法1.3.1 实验1.3.2 实验操作步骤1.1 最小二乘法实现 1.1.1 算法介绍 最小二乘法(Least Square Method),做为分类回归算法的基础,有着悠久的历…

【UE】简单的警觉系统

效果 步骤 1. 新建一个空白工程&#xff0c;添加第三人称游戏内容包 2. 打开第三人称角色蓝图“BP_ThirdPersonCharacter” 选中弹簧臂组件&#xff0c;将目标臂长度设置为600&#xff0c;z轴方向的插槽偏移设置为100 3. 将“BP_ThirdPersonCharacter”移入场景&#xff0c;该…

Glove学习笔记

global vectors for word representation B站学习视频 1、LSA与word2vec 我们用我们的见解&#xff0c;构建一个新的模型&#xff0c;Glove&#xff0c;全局向量的词表示&#xff0c;因为这个模型捕捉到全局预料的统计信息。 LSA:全局矩阵分解word2vec&#xff1a;局部上下文…