Layui弹框中数据表格中可双击选择一条数据的实现


Posted in Javascript onMay 06, 2020

Layui提供的功能如下(预览)

可自行查看:layui官网此模块的链接
着急看双击选中 直接看标黄色部分

Layui弹框中数据表格中可双击选择一条数据的实现

假设这是个弹窗里的表格和数据点击圆圈,圆圈变绿则为选中,选中后点击上方查看数据按钮(实际中是确认按钮,实际中点击确认按钮后会关闭弹窗并把json串带到原本页面中)

Layui提供的代码如下(查看代码)

<body>
<!-- 表格空架子 -->
<table class="layui-hide" id="test" lay-filter="test"></table>
<!-- 确认(查看数据按钮) -->
<script type="text/html" id="toolbarDemo">
 <div class="layui-btn-container">
  <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
 </div>
</script> 
<script src="//res.layui.com/layui/dist/layui.js" charset="utf-8"></script>
<!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 --> 
<script>
	layui.use('table', function(){
	 var table = layui.table;
	 table.render({
	  elem: '#test'
	  ,url:'/demo/table/user/'
	  ,toolbar: '#toolbarDemo'
	  ,cols: [[
	   {type:'radio'}
	   ,{field:'id', width:80, title: 'ID', sort: true}
	   ,{field:'username', width:80, title: '用户名'}
	   ,{field:'sex', width:80, title: '性别', sort: true}
	   ,{field:'city', width:80, title: '城市'}
	   ,{field:'sign', title: '签名', minWidth: 100}
	   ,{field:'experience', width:80, title: '积分', sort: true}
	   ,{field:'score', width:80, title: '评分', sort: true}
	   ,{field:'classify', width:80, title: '职业'}
	   ,{field:'wealth', width:135, title: '财富', sort: true}
	  ]]
	  ,page: true
	 });
	 
	 //头工具栏事件
	 table.on('toolbar(test)', function(obj){
	  var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
	  switch(obj.event){
	   case 'getCheckData':
	    var data = checkStatus.data; //获取选中行数据
	    layer.alert(JSON.stringify(data));
	   break;
	  };
	 });
	});
</script>
</body>

实际需求实例

Layui弹框中数据表格中可双击选择一条数据的实现

  • 点击 【选择】 按钮,出现弹框
  • 弹框里有数据表格
  • 点击圆圈为选中当前条数据
  • 点击弹框中【确认】把选中条数据带到主页面

实际代码实例

主页面代码(底,都为自动带出的输入框)

静态部分

<div>
	<div>
		<span>客户姓名:</span>
			<form:input path="customerName" readonly="true"/>
		<span onclick="onclick()" title="选择">
			<input id="selectCustomer"	class="btn" type="button" value="选择" /></span>
	</div>
	<div>
		<span>客户性别:</span>
		<form:input path="customerSex" readonly="true"/>
	</div>
	<div>
		<span>客户年龄:</span>
		<form:input path="customerYears" readonly="true"/>
	</div>
</div>

【选择】按钮的弹窗事件

function onclick(){
 var width = window.screen.availWidth*0.8;
 var height = window.screen.availHeight*0.65;
 var iTop=(window.screen.availHeight-30-height)/2;
 var iLeft=(window.screen.availWidth-30-width)/2;
 var url="${xxx}/vvvv/rrrrr/getCustomerList"; //后端代码就不介绍了
 window.open(url,'客户信息','height='+height+',width='+width+',top='+iTop+',left='+iLeft+',
 toolbar=no,menubar=no,scrollbars=yes, resizable=yes,location=no, status=no')
}

弹窗页面代码

弹窗页面中?静态部分

<table id="contentTable" class="layui-table">
 	<thead>
 		<tr>
 			<th></th>
 			<th>客户姓名</th>
 			<th>客户性别</th>
 			<th>客户年龄</th>
 			<th>...</th>
 		</tr>
 	</thead>
 	<tbody>
 		<c:forEach items="${page.list}" var="customerMain">
 			<tr>
 				<td align="center"><input name="customerId" type="radio" value="${customerMain.id}"></td>
 				<td>${customerMain.customerName}</td>
 				<td>${customerMain.customerSex}</td>
 				<td>${customerMain.customerYears}</td>
 				<td class="hide" >${customerMain.....}</td>
 			</tr>
 		</c:forEach>
 	</tbody>
</table>

弹框页面上-- == 单击单选圆圈的事件+双击行选中 ==

$(document).ready(function() {
 	//双击行 即可执行函数(行数据被选中:radio为checked)
  	$("table tbody tr").dblclick(function(i) {
  		$(this).find("input[type='radio']").prop("checked", true)
  	});
  	//圆圈改变状态即可执行函数
  	$("#contentTable tbody tr input").change(function () {
    var ischecked = $(this).prop("checked");
    var index=$(this).parent().parent().index()
    var tr=$("#contentTable tbody tr")
    if(ischecked){
      for(var i=0;i<tr.length;i++){
        if(i!=index){
          $("#contentTable tbody tr:eq("+i+") input").prop("checked",!ischecked);
        }
      }
    }
  })
});

弹框页面上?选择好数据后带回主页面的函数

<script>
	//给弹框中【确认】按钮绑定事件
	function toSubmit(){
		//此方法在下方
		var data=getRowData();
		if(data==null){
			layer.alert("请先选择一位客户")
			return ;
		}
		window.opener.getCustomerData(data);//调用主页面上的方法,给主页面赋值,最下方有具体方法过程
		window.close();//关闭弹窗
	}
	//给弹框中【返回】按钮绑定事件
	function closed(){
		window.close();
	}

	//获取行对象
	function getRowData(){
		var row = null;
		//锁定行(循环遍历找到被选中的行)
		$("table tbody tr").each(function(){
			var radio = $(this).find("td").eq(0).find("input[type='radio']:checked").val();
			if(radio){
				row = $(this) ;
			}
		});
		//如果此行有数据则拼接
		if(row){
			var customerId = row.find("td").eq(0).find("input[type='radio']:checked").val();
			var customerName = row.find("td").eq(1).text();
			var customerSex = row.find("td").eq(2).text();
			var customerYears = row.find("td").eq(3).text();
			//拼接模板 $.trim() jQuery.trim()函数用于去除字符串两端的空白字符。该函数可以去除字符串开始和末尾两端的空白字符(直到遇到第一个非空白字符串为止)。它会清除包括换行符、空格、制表符等常见的空白字符。
			var data = "[{\"customerId\":\""+$.trim(customerId)
					  +"\",\"customerName\":\""+$.trim(customerName)
				    +"\",\"customerSex\":\""+$.trim(customerSex)
				    +"\",\"customerYears\":\""+$.trim(customerYears)
					  +"\"}]";
		}
		return data ;
	}
	
</script>

调用主页面上的给主页面赋值的方法

<script>
	function getCustomerData(data){
		var json = JSON.parse(data);
		$("#customerId").val(json[0].customerId);
	  $("#customerName").val(json[0].customerName);
	  $("#customerSex").val(json[0].customerSex);
	  $("#customerYears").val(json[0].customerYears);
	  ....
	}
</script>

到此这篇关于Layui弹框中数据表格中可双击选择一条数据的实现的文章就介绍到这了,更多相关Layui弹框双击数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
表单切换,用回车键替换Tab健(不支持IE)
Jul 20 Javascript
JS跨域总结
Aug 30 Javascript
小结Node.js中非阻塞IO和事件循环
Sep 18 Javascript
javascript中select下拉框的用法总结
Jan 07 Javascript
省市联动效果的简单实现代码(推荐)
Jun 06 Javascript
jquery datatable服务端分页
Aug 31 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
Dec 28 Javascript
javascript实现滑动解锁功能
Mar 22 Javascript
JS鼠标滚动分页效果示例
Jul 05 Javascript
js中let和var定义变量的区别
Feb 08 Javascript
JavaScript Canvas实现验证码
Aug 02 Javascript
JS实现使用POST方式发送请求
Aug 30 Javascript
Vue SSR 即时编译技术的实现
May 06 #Javascript
深入webpack打包原理及loader和plugin的实现
May 06 #Javascript
将Vue组件库更换为按需加载的方法步骤
May 06 #Javascript
让IDE识别webpack的别名alias的实现方法
May 06 #Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
May 06 #Javascript
JS 设计模式之:单例模式定义与实现方法浅析
May 06 #Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
May 06 #Javascript
You might like
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
php组合排序简单实现方法
2016/10/15 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
python使用arp欺骗伪造网关的方法
2015/04/24 Python
Python算法应用实战之栈详解
2017/02/04 Python
python多进程实现进程间通信实例
2017/11/24 Python
python实现海螺图片的方法示例
2019/05/12 Python
python 有效的括号的实现代码示例
2019/11/11 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
服务行业演讲稿
2014/09/02 职场文书
财政局个人年终总结
2015/03/03 职场文书
装修安全责任协议书
2016/03/22 职场文书