弹框勾选datatable中的数据,点击保存后添加到另一个表中,同一个页面
需求描述:做编辑的时候,点击添加按钮,弹出数据表table2,勾选弹出框中的数据,点击保存后能够添加到table1中,并且已经被添加到table1中的数据,在弹出框中显示已选,checkbox隐藏;table1中的操作项有一个删除,删除table1的数据之后,table2中对应数据的checkbox恢复可选。代码太多,就不废话了,直接贴代码
代码:
//html代码
<button class="btn sbold green" id="toAddOrgPage" onclick="">
<span class="ladda-label">
添加机构
</span>
</button>
//html代码 table1
<table class="table table-striped table-checkable" id="table1">
<thead>
<tr>
<th><label class="mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="group-checkable" data-set="#table1 .checkboxes"/>
<span></span>
</label></th>
<th>名称</th>
<th>编码</th>
<th>级别</th>
<th>父级名称</th>
<th>是否是默认</th>
<th>操作</th>
</tr>
</thead>
<tbody id="table1Body">
<tr th:each="org : ${userOrgs}" th:id="${org.orgId}" role="row" class="odd" data-save="1">
<td><label class="mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="checkboxes checkOrg2"
th:value="${org.orgId}" name=""/>
<input type="text" th:value="${org.orgId}" name="orgId"
hidden="hidden"/>
<input type="text" hidden="hidden" data-first-edit="1" th:value="${org.resIds}"
name="resIds"
th:class="${org.orgId}"/>
<span></span>
</label></td>
<td th:text="${org.orgName}">名称</td>
<td th:text="${org.orgCode}">编码</td> <div th:switch="${org.orgLevel}">
<p th:case="'1'">
<td th:text="一级">级别</td>
</p>
<p th:case="'2'">
<td th:text="二级">级别</td>
</p>
</div>
<td th:text="${org.orgParentName eq null}? '':${org.orgParentName} ">
父级名称
</td>
<td><label class="mt-radio mt-radio-single mt-radio-outline">
<input type="radio" onclick="radioClick(this)" name="radioDefault" class=""
th:if="${org.userOrgDefault eq '0'}"/>
<input type="radio" onclick="radioClick(this)" name="radioDefault" class=""
th:if="${org.userOrgDefault eq '1'}" checked="checked"/>
<input type="text" th:value="${org.userOrgDefault}" name="userOrgDefault"
hidden="hidden"/> <span></span>
</label></td>
<td><div>
<img th:src="@{/assets-new/apps/img/shanchu.png}"
th:onclick="|deleteById('${org.orgId}')|" title="删除"/>
</div>
</td>
</tr>
</tbody>
</table>
//html代码table2
<div id="responsive_2" class="modal fade" tabindex="-1" data-width="700">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
<h3 class="modal-title">添加按钮</h3>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div class="portlet light bordered">
<div class="portlet-body">
<table class="table table-checkable do-exclude-filtering" id="table2">
<thead>
<tr>
<th><label class="mt-checkbox mt-checkbox-single mt-checkbox-outline">
<input type="checkbox" class="group-checkable" data-set="#table2 .checkboxes"/>
<span></span>
</label></th>
<th>名称</th>
<th>编码</th>
<th>级别</th>
<th>父级别名称</th>
<th hidden="hidden">操作</th>
</tr>
</thead>
<tbody id="tableBody2">
<tr th:each="org : ${listAll}" th:name="${org.orgId}" data-save="0">
<td><label class="mt-checkbox mt-checkbox-single mt-checkbox-outline" name="lb">
<input type="checkbox" class="checkboxes checkOrg" th:value="${org.orgId}"/>
<span></span>
</label>
<span hidden="hidden" name="select" style="color: red">已选</span>
</td>
<td th:text="${org.orgName}">机构名称</td>
<td th:text="${org.orgCode}">机构编码</td>
<div th:switch="${org.orgLevel}">
<p th:case="'1'">
<td th:text="一级机构">机构级别</td>
</p>
<p th:case="'2'">
<td th:text="二级机构">机构级别</td>
</p>
</div>
<td th:text="${org.orgParentName eq null}? '':${org.orgParentName} ">
父级名称
</td>
<td hidden="hidden">
<div style="display: flex; align-items: center;">
<div>
<img th:src="@{/assets-new/apps/img/shanchu.png}"
th:onclick="|deleteById('${org.orgId}')|" title="删除"/>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn btn-outline blue" onclick="saveOrg()">保存
</button>
<button type="button" data-dismiss="modal" class="btn btn-outline dark">取消</button>
</div>
</div>
//js代码
// 进入编辑页,回显已被选择的机构 放在初始化中
var nodes = $('#table1').DataTable().rows().nodes();
for (var i = 0; i < nodes.length; i++) {
var nowRow = $(nodes[i]);
var orgId = nowRow.attr("id");
var tr = $('#table2').DataTable().row("tr[name=" + orgId + "]").node();
$(tr).data("save", "1");
$(tr).addClass("active");
$(tr).find("label[name='lb'] input").prop('checked', true);
}
//点击添加按钮
$("#toAddOrgPage").click(function () {
// 1.得到选中
// 2.判断是否保存
// 3.已经保存:显示已选 未保存:取消选择
var nodes = $('#table2').DataTable().rows().nodes();
for (var i = 0; i < nodes.length; i++) {
var nowRow = $(nodes[i]);
var active = nowRow.hasClass('active');
var save = nowRow.data('save');
if (active) {
if (save == '1') {
nowRow.find("label[name='lb']").hide();
nowRow.find("span[name='select']").show();
} else if (save == '2') { // 从已选机构中删除
nowRow.find("span[name='select']").hide();
nowRow.find("label[name='lb']").show();
nowRow.find("label[name='lb'] input").prop('checked', false);
nowRow.removeClass("active");
nowRow.data('save', '0');
} else if (save == 0) { // 用户选择后点击了取消按钮
nowRow.find("label[name='lb'] input").prop('checked', false);
nowRow.removeClass("active");
}
}
}
$('#responsive_2').modal();
});
//点击保存按钮
function saveOrg() {
// 1.遍历dataTable,获取每页中ck的选中状态,添加行标记为保存
// 2.tb1添加相应行
var nodes = $('#table2').DataTable().rows().nodes();
for (var i = 0; i < nodes.length; i++) {
var active = $(nodes[i]).hasClass('active');
if (active) {
var nowRow = $(nodes[i]);
// 判断是否已经保存
if (nowRow.data('save') == "1") { // 已经被保存过
continue;
}
var trName = nowRow.attr("name");
var tr = $('#table2').DataTable().row(i).data();
// 设置行的状态,标记这一行已经被保存,和选中后点击取消的行进行区分
nowRow.data("save", "1");
var tb1 = $('#table1').DataTable();
var tr0 = "<label class=\"mt-checkbox mt-checkbox-single mt-checkbox-outline\">" +
"<input type=\"checkbox\" class=\"checkboxes checkOrg2\" value=" + trName + " name=\"\" />" +
"<input type=\"text\" value=" + trName + " name=\"orgId\" hidden=\"hidden\"/>" +
"<input type=\"text\" hidden=\"hidden\" value=\"\" class=" + trName + " name=\"resIds\" />" +
"<span></span>" +
"</label>";
var tr4 = "<label class=\"mt-radio mt-radio-single mt-radio-outline\">" +
"<input type=\"radio\" onclick=\"radioClick(this)\" name=\"radioDefault\" class=\"\"/>" +
"<input type=\"text\" value=\"0\" name=\"userOrgDefault\" hidden=\"hidden\"/>" +
"<span></span>" +
"</label>";
tb1.row.add({
"DT_RowId": trName,
"0": tr0,
"1": tr[1],
"2": tr[2],
"3": tr[3],
"4": tr[4],
"5": tr4,
"6": tr[5]
}).draw();
}
}
var rowCount = $("#table1").DataTable().page.info().recordsTotal;
if (rowCount > 0) {
// 设置默认radio
var checkedInput = $('#table1').DataTable().$('input:radio[name="radioDefault"]:checked');
if (checkedInput.length == 0) {
var node = $($('#table1').DataTable().row(0).node());
node.find('input:radio[name="radioDefault"]').prop('checked', true);
node.find('input:radio[name="radioDefault"]').next().attr('value', '1');
}
}
}
//table1中点击删除
function deleteById(orgId) {
layer.confirm("确认要删除此机构吗?", {title: "删除确认"}, function (index) {
layer.close(index);
// 1.删除
// 2.改变tb2中相应的行的状态为未选中
$('#table1').DataTable().row('#' + orgId).remove().draw();
var delRow = $($('#table2').DataTable().row('tr[name=' + orgId + ']').node());
// 标记为从已选中机构中删除
delRow.data('save', '2'); var rowCount = $("#table1").DataTable().page.info().recordsTotal;
if (rowCount > 0) {
// 设置默认radio
var checkedInput = $('#table1').DataTable().$('input:radio[name="radioDefault"]:checked');
if (checkedInput.length == 0) {
var node = $($('#table1').DataTable().row(0).node());
node.find('input:radio[name="radioDefault"]').prop('checked', true);
node.find('input:radio[name="radioDefault"]').next().attr('value', '1');
}
}
});
}
//radioClick函数
function radioClick(nowRadio) {
$('#table1').DataTable().$('input:radio[name="radioDefault"]').each(function () {
var c = $(this).prop("checked");
if (c == true) {
if (this != nowRadio) {
$(this).prop('checked', false);
$(this).next().attr('value', '0');
} else {
$(this).next().attr('value', '1');
}
} else {
$(this).next().attr('value', '0');
}
});
}
效果:

总结:说实话这几次写的笔记是很啰嗦了,代码粘的太多,给人一种视觉冲击,冲击的效果就是,一坨一坨的不想看,看不下去,ε=(´ο`*)))唉
弹框勾选datatable中的数据,点击保存后添加到另一个表中,同一个页面的更多相关文章
- SQL将一个表中的某一列值全部插入到另一个表中
1. SQL将一个表中的某一列值全部插入到另一个表中 插入的话: insert into a(col) select col from b; 更新的话: update a set col=selec ...
- Oracle 函数 “申请通过后,将该表中循环遍历到的所有内容插到另一个表中”
create or replace function mcode_apply_insert_material(p_mca_no VARCHAR2, p_action VARCHAR2, p_wf_no ...
- 【java IO】使用Java输入输出流 读取txt文件内数据,进行拼接后写入到另一个文件中
package com.sxd.test.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java ...
- Angular/Vue多复选框勾选问题
此页面效果以Angular实现,Vue也可按照其大致流程实现,其核心本质没有改变. 功能效果为:页面初始化效果为要有所有角色的复选框,要求初始化默认勾选的角色要显示勾选,之后,能按照最终勾选的状态提交 ...
- 如何将一个excel表格的数据匹配到另一个表中
我们在操作excel表的时,有时需要将一个excel表中的数据匹配到另一个表中,那么就需要用到VLOOKUP函数,VLOOKUP函数是Excel中的一个纵向查找函数,VLOOKUP是按列查找,最终返回 ...
- VLOOKUP函数将一个excel表格的数据匹配到另一个表中
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- SQL存在一个表而不在另一个表中的数据, 更新字段为随机时间
--更新字段为随机时间 86400秒=1天 UPDATE dl_robot ), ,GETDATE()) ) SQL存在一个表而不在另一个表中的数据 方法一 使用 not in ,容易理解,效 ...
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
- delete表1条件是另一个表中的数据,多表连接删除(转)
DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 1. delete from t1 where 条件 2.delete t1 from t1 where 条件 3. ...
随机推荐
- 【Vue】中 $attrs 中的使用方法
vue官网是这样介绍的: 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外).当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 ( ...
- 如何在eclipse安装apk包
如何在eclipse安装下载好的apk包 好像是有好几种方法,我成功的是这种. 1.首先启动模拟器,我选择的是Android 4.2.2,因为...默认安得Android 7.1.1起不了,真是大坑, ...
- Django学习手册 - ORM 外键
Django 外键创建 关键语法: models.ForeignKey("UserGroup",to_field="gid",default=1,on_dele ...
- 51nod 1437 迈克步 单调栈
利用单调栈高效的求出,一个数a[i]在哪个区间内可作为最小值存在. 正向扫描,求出a[i]可做为最小值的区间的左边界 反向扫描,求出a[i]可作为最小值的区间的右边界 r[i] - l[i] +1 就 ...
- 基于html + css 实现图片瀑布流
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- OGG初始化之使用数据库实用程序加载数据
Loading Data with a Database Utility 要使用数据库复制实用程序建立目标数据,您需要启动更改同步提取组,以便在数据库实用程序创建并应用数据的静态副本时提取正在进行的数 ...
- 20165231 2017-2018-2 《Java程序设计》第5周学习总结
教材学习内容总结 第七章 内部类 在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类. 内部类的类体中不可以声明类变量和类方法.外嵌类的类体中可以用内部类声明对象,作为外嵌 ...
- MFC修改对话框标题
对话框标题栏内容为静态 直接在对话框属性"常规"的"Caption"中修改. 动态生成对话框标题栏内容 SetWindowText()函数就可以 CString ...
- python中“*”、"*args"、"kwargs"三种用法
参考链接:https://www.cnblogs.com/cwind/p/8996000.html 注意的是: (1)"*"符号的用法很类似C++中的指针,针对列表; (2)&qu ...
- 对比Dijakstra和优先队列式分支限界
Dijakstra和分支限界都是基于广度优先搜索,如果说两者都是生成一棵树,那Dijakstra总是找距离树根最近的(属于贪心算法),优先队列式分支限界是在层遍历整棵搜索树的同时剪去达不到最优的树枝. ...