LayUi- 动态表格table中下拉框Select的设置和监听及更新

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<link rel="stylesheet" href="/adminlte/layui/css/layui.css" media="all" />
	<style>
		.layui-table-cell {
			overflow: visible;
		}

		.layui-table-box {
			overflow: visible;
		}

		.layui-table-body {
			overflow: visible;
		}
		/* 设置下拉框的高度与表格单元相同 */

		td .layui-form-select {
			margin-top: -10px;
			margin-left: -15px;
			margin-right: -15px;
		}
	</style>
</head>

<body class="childrenBody">
<div style="padding:15px;">
	<form class="layui-form" id="fromId" action="#">
			<div id="selectTool" style="display: none">
			<select  name="selectDemo" lay-filter="selectDemo" lay-search  >
				<option value="">请选择地区</option>
			</select>
			</div>
		<div id="selectTool1" style="display: none">
			<select name="selectDemo1" lay-filter="selectDemo1" lay-search >
				<option value="">请选择供应商</option>

			</select>
		</div>
		<div id="selectTool2" style="display: none">
			<select name="selectDemo2" lay-filter="selectDemo2" lay-search>
				<option value="">请选择物料类别</option>
			</select>
		</div>
		<div id="selectTool3" style="display: none">
			<select name="selectDemo3" lay-filter="selectDemo3" lay-search>
				<option value="">请选择物料名称</option>

			</select>
		</div>
		<div id="selectTool4" style="display: none">
			<select name="selectDemo4" lay-filter="selectDemo4" lay-search>
				<option value="">请选择物料规格</option>
			</select>
		</div>
		<div id="selectTool5" style="display: none">
			<select name="selectDemo5" lay-filter="selectDemo5" lay-search>
				<option value="">请选择出库类别</option>
			</select>
		</div>
		<script type="text/html" id="toolbarDemo">
			<div align="left" class="layui-btn-container">
				<!--<button id="addTable" class="layui-btn layui-btn-sm layui-btn-normal" lay-event="add">添加行</button>-->
			</div>
		</script>
		<script type="text/html" id="bar">
			<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
		</script>
		<table id="demo" lay-filter="tableFilter"></table>
		<div class="layui-form-item" style="margin-top: 30px;text-align: center;">
			<button class="layui-btn" lay-submit="" lay-filter="*">保存</button>
			<!--<a href="" class="layui-btn">返回</a>-->
		</div>
	</form>
</div>
<script type="text/javascript" src="/adminlte/layui/layui.js"></script>
<script type="text/javascript" src="/adminlte/layui/jquery-3.2.1.min.js"></script>
<script>
	layui.use(['laydate', 'table', 'form', 'jquery','layer'], function() {
		var table = layui.table,
				form = layui.form,
				laydate = layui.laydate,
				layer=layui.layer,
				$ = layui.jquery;
		form.on('select(selectDemo)', function(data) {
			//这里是当选择一个下拉选项的时候 把选择的值赋值给表格的当前行的缓存数据 否则提交到后台的时候下拉框的值是空的
            // console.log(data)

			var elem = data.othis.parents('tr');
			var dataindex = elem.attr("data-index");
			$.each(tabledata, function(index, value) {
				if(value.LAY_TABLE_INDEX == dataindex) {
					value.local = data.value;
					//value.local = elem.find("td[data-field='local']").find("[name='selectDemo'] option:selected").text();
				}
			});
            $.ajax({
                //几个参数需要注意一下
                type: "POST",//方法类型
                dataType: "json",//预期服务器返回的数据类型
                url: "/" ,//url
                data:{local:data.value},
                success: function (result) {
                    if (result.success>0) {
                        elem.find("td[data-field='supplierName']").find("[name='selectDemo1']").empty();
                        var op="";
                        var bp="请选择供应商名称";
                        elem.find("td[data-field='supplierName']").find("[name='selectDemo1']").append("<option value="+op+">"+bp+"</option>");
                        var list =result.date;
                        $.each(list,function (i,val) {
                            elem.find("td[data-field='supplierName']").find("[name='selectDemo1']").append("<option value="+val+">"+val+"</option>");
                        });
                        form.render('select')
                    }else{
                        /* alert("供应商信息错误");*/
                    }
                }/*,
            error : function() {
                alert("异常!");
            }*/
            });
		});
		form.on('select(selectDemo1)', function(data) {
			//这里是当选择一个下拉选项的时候 把选择的值赋值给表格的当前行的缓存数据 否则提交到后台的时候下拉框的值是空的
			var elem = data.othis.parents('tr');
			var dataindex = elem.attr("data-index");
			$.each(tabledata, function(index, value) {
				if(value.LAY_TABLE_INDEX == dataindex) {
					value.supplierName = data.value;
				}
			});

            $.ajax({
                //几个参数需要注意一下
                type: "POST",//方法类型
                dataType: "json",//预期服务器返回的数据类型
                url: "" ,//url
                data:{factory:data.value},
                success: function (result) {
                    if (result.success>0) {
                        elem.find("td[data-field='goodsType']").find("[name='selectDemo2']").empty();
                        var op="";
                        var bp="请选择物料类别";
                        elem.find("td[data-field='goodsType']").find("[name='selectDemo2']").append("<option value="+op+">"+bp+"</option>");
                        var list =result.date;
                        $.each(list,function (i,val) {
                            var a =val.id;
                            var b =val.materialtype;
                            elem.find("td[data-field='goodsType']").find("[name='selectDemo2']").append("<option value="+a+">"+b+"</option>");
                        });
                        form.render('select');
                    }else{
                        /*alert("类别信息错误");*/
                    }
                }/*,
            error : function() {
                alert("异常!");
            }*/
            });

		});
		form.on('select(selectDemo2)', function(data) {
			//这里是当选择一个下拉选项的时候 把选择的值赋值给表格的当前行的缓存数据 否则提交到后台的时候下拉框的值是空的
			var elem = data.othis.parents('tr');
			var dataindex = elem.attr("data-index");
			$.each(tabledata, function(index, value) {
				if(value.LAY_TABLE_INDEX == dataindex) {
					//value.goodsType = data.value;
					value.goodsType = elem.find("td[data-field='goodsType']").find("[name='selectDemo2'] option:selected").text();
				}
			});
            $.ajax({
                //几个参数需要注意一下
                type: "POST",//方法类型
                dataType: "json",//预期服务器返回的数据类型
                url: "/" ,//url
                data:{pid:data.value},
                success: function (result) {
                    if (result.success>0) {
                        elem.find("td[data-field='goodsName']").find("[name='selectDemo3']").empty();
                        var op="";
                        var bp="请选择物料名称";
                        elem.find("td[data-field='goodsName']").find("[name='selectDemo3']").append("<option value="+op+">"+bp+"</option>");
                        var list =result.date;
                        $.each(list,function (i,val) {
                            var a =val.id;
                            var b =val.materialName
                            elem.find("td[data-field='goodsName']").find("[name='selectDemo3']").append("<option value="+a+">"+b+"</option>");
                        });
                        form.render('select');
                    }else{
                        /*alert("名称信息错误");*/
                    }
                }/*,
            error : function() {
                alert("异常!");
            }*/
            });
		});
		form.on('select(selectDemo3)', function(data) {
			//这里是当选择一个下拉选项的时候 把选择的值赋值给表格的当前行的缓存数据 否则提交到后台的时候下拉框的值是空的
			var elem = data.othis.parents('tr');
			var dataindex = elem.attr("data-index");
			$.each(tabledata, function(index, value) {
				if(value.LAY_TABLE_INDEX == dataindex) {
					//value.goodsName = data.value;
					value.goodsName = elem.find("td[data-field='goodsName']").find("[name='selectDemo3'] option:selected").text();
				}
			});
            $.ajax({
                //几个参数需要注意一下
                type: "POST",//方法类型
                dataType: "json",//预期服务器返回的数据类型
                url: "/" ,//url
                data:{pid:data.value},
                success: function (result) {
                    if (result.success>0) {
                        elem.find("td[data-field='specifications']").find("[name='selectDemo4']").empty();
                        var op="";
                        var bp="请选择物料规格";
                        elem.find("td[data-field='specifications']").find("[name='selectDemo4']").append("<option value="+op+">"+bp+"</option>");
                        var list =result.date;
                        $.each(list,function (i,val) {
                            var a =val.id;
                            var b =val.materialSpecification;
                            elem.find("td[data-field='specifications']").find("[name='selectDemo4']").append("<option value="+b+">"+b+"</option>");
                        });
                        form.render();
                    }else{
                        /* alert("规格信息错误");*/
                    }
                }/*,
            error : function() {
                alert("异常!");
            }*/
            });
		});
		form.on('select(selectDemo4)', function(data) {
			//这里是当选择一个下拉选项的时候 把选择的值赋值给表格的当前行的缓存数据 否则提交到后台的时候下拉框的值是空的
			var elem = data.othis.parents('tr');
			var dataindex = elem.attr("data-index");
			$.each(tabledata, function(index, value) {
				if(value.LAY_TABLE_INDEX == dataindex) {
					value.specifications = data.value;
				}
			});
		});
		form.on('select(selectDemo5)', function(data) {
			//这里是当选择一个下拉选项的时候 把选择的值赋值给表格的当前行的缓存数据 否则提交到后台的时候下拉框的值是空的
			var elem = data.othis.parents('tr');
			var dataindex = elem.attr("data-index");
			$.each(tabledata, function(index, value) {
				if(value.LAY_TABLE_INDEX == dataindex) {
					value.outStockType = data.value;
				}
			});
		});

		//第一个实例 加载表格
		var tableIns = table.render({
			elem: '#demo',
			/*toolbar: '#toolbarDemo',*/
		/*	defaultToolbar: ['filter', 'print', 'exports'],*/
			limit: 150,
			cols: [
				[ //表头
					{
						field: 'local',
						title: '所在地区',
						templet: '#selectTool'
					}, {
					field: 'supplierName',
					title: '供应商名称',
					templet: '#selectTool1'
				}, {
					field: 'goodsType',
					title: '物料类别',
					templet: '#selectTool2'
				}, {
					field: 'goodsName',
					title: '物料名称',
					templet: '#selectTool3'
				}, {
					field: 'specifications',
					title: '物料规格',
					templet: '#selectTool4'
				}, {
					field: 'outStockType',
					title: '出库分类',
					templet: '#selectTool5'
				},{
					field: 'nums',
					title: '出库数量',
					edit: 'text'
				},  {
					field: 'remarks',
					title: '备注',
					edit: 'text'
				}/*, {
					title: '操作',
					align: 'center',
					toolbar: '#bar'
				}*/
				]
			],
			data: [{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			},{
				"local": "",
				"supplierName": "",
				"goodsType": "",
				"goodsName": "",
				"specifications": "",
				"outStockType": "",
				"nums": "",
				"remarks": ""
			}]
			,
			done: function(res, curr, count) {
				//如果是异步请求数据方式,res即为你接口返回的信息。
				//如果是直接赋值的方式,res即为:{data: [], count: 99} data为当前页数据、count为数据总长度
				tabledata = res.data;
				//去掉下拉框的失焦事件 否则在下拉框里输入值 失焦后变回下拉选项里的值了 没有需要的同学忽略掉即可
				$('.layui-form-select').find('input').unbind("blur");
				//这里是表格重载的时候 回显下拉框的数据
				$('tr').each(function(e) {
					var $cr = $(this);
					var dataindex = $cr.attr("data-index");
					$.each(tabledata, function(index, value) {
						if(value.LAY_TABLE_INDEX == dataindex) {
							$cr.find('input').val(value.materialcode);
						}
					});
				});
			}
		});
		var tabledata;
		//监听工具条删除按钮
		table.on('tool(tableFilter)', function(obj) {
			if(obj.event === 'del') {
				obj.del();
			};
		});

		//头工具栏添加按钮事件
		table.on('toolbar(tableFilter)', function(obj) {
			if(obj.event === 'add') {
				tabledata.push({
					"local": "",
					"supplierName": "",
					"goodsType": "",
					"goodsName": "",
					"specifications": "",
					"nums": "",
					"outStockType": "",
					"remarks": ""
				});

				table.reload('demo', {
					data: tabledata
				});

			}
		});
		//提交数据到后台保存
		form.on('submit(*)', function(data) {
			// console.log(data.elem) //被执行事件的元素DOM对象,一般为button对象
			// console.log(data.form) //被执行提交的form对象,一般在存在form标签时才会返回
			//  console.log(data.field) //当前容器的全部表单字段,名值对形式:{name: value}
		/*	console.log(JSON.stringify(tabledata));//当前容器的全部表单字段,名值对形式:{name: value}
			console.log($("[name='selectDemo']").html());*/
			$.ajax({
				url: "",
				async: true,
				type: "post",
				data: {tabledata:JSON.stringify(tabledata)},
				dataType: "json",
				success: function(result) {
					if(result.success >0) {
						var list =result.date;
						var str="操作成功\n";
						$.each(list,function(i,val){
							str=str+val+"\n";
						});
						alert(str);
						layer.msg(str, {
							btnAlign: 'c',
							time: 10000, //20s后自动关闭
							btn: ['确定']
						});
						var index = parent.layer.getFrameIndex(window.name);
						parent.layer.close(index);
					} else {
						console.log(result.date);
						alert("系统错误");
					}
				}
			});
			return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
		});
	});
	$(
			function () {
				loadSelect();
				outTyp();
			}
	)
	function outTyp() {
		$.ajax({
			//几个参数需要注意一下
			type: "POST",//方法类型
			dataType: "json",//预期服务器返回的数据类型
			url: "/" ,//urlquerySupplierLocal/queryLocal
			data:{pid:207},
			success: function (result) {
				if (result.success>0) {
					var list =result.date;
			/*		$("[name='outStockType']").empty();
				/!*	var op="";
					var bp="请选择出库类别";
					$("[name='outStockType']").append("<option value="+op+">"+bp+"</option>");*!/*/
					$.each(list,function (i,val) {
						$("[name='selectDemo5']").append("<option value="+val+">"+val+"</option>");
					});
				}else{
					alert("信息错误");
				}
			}
		});
	}
	function loadSelect() {
		$.ajax({
			//几个参数需要注意一下
			type: "POST",//方法类型
			dataType: "json",//预期服务器返回的数据类型
			url: "/" ,//url/goodStock/locals
			success: function (result) {
				if (result.success>0) {
					var list =result.date;
					$.each(list,function (i,val) {
						$("[name='selectDemo']").append("<option value="+val+">"+val+"</option>");
					});
				}else{
					alert("地址信息错误");
				}
			},
			error : function() {
				alert("异常!");
			}
		});
	}
	function supplierNameSearch() {
		$.ajax({
			//几个参数需要注意一下
			type: "POST",//方法类型
			dataType: "json",//预期服务器返回的数据类型
			url: "" ,//url
			success: function (result) {
				if (result.success>0) {
					var list =result.date;
					$.each(list,function (i,val) {
						$("[name='selectDemo1']").append("<option value="+val+">"+val+"</option>");
					});
				}else{
					alert("供应商信息错误");
				}
			},
			error : function() {
				alert("异常!");
			}
		});

	}
	function goodsTypes() {
		$.ajax({
			//几个参数需要注意一下
			type: "POST",//方法类型
			dataType: "json",//预期服务器返回的数据类型
			url: "" ,//url
			success: function (result) {
				if (result.success>0) {
					var list =result.date;
					$.each(list,function (i,val) {
						$("[name='selectDemo2']").append("<option value="+val+">"+val+"</option>");
					});
				}else{
					alert("类别信息错误");
				}
			},
			error : function() {
				alert("异常!");
			}
		});
	}
</script>

</body>

</html>

效果图

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Layui是一种基于layui框架的前端UI库,可以方便地在网页创建动态表格下拉框等组件。 使用Layui动态表格带搜索的下拉框,首先需要引入LayUI的相关文件,如layui.css、layui.js等。然后,在HTML定义一个表格容器,可以使用div标签,并给它一个id,方便后续的操作。 接下来,在JavaScript通过Layuitable模块进行表格的初始化和渲染。我们可以使用table.render()方法,传入一些参数来定义表格的样式、列属性以及数据源等。在其的cols配置项,我们可以定义表格的列,包括列头名称、字段名、宽度等信息。此时,我们可以在列的属性增加一个toolbar属性,来定义表格的工具栏。 其的toolbar可以是一个函数,用于渲染每一行的工具栏内容。我们可以在这个函数创建一个下拉框,通过Layui的form模块进行渲染和监听。我们可以使用form.on()方法来监听下拉框的选事件,并在监听函数处理相应的逻辑。 在表格,我们可以使用formSelects组件,它是一个基于Layui的多选、搜索等功能的下拉框插件。我们可以通过定义一个元素的class为select,然后使用formSelects.render()方法来渲染下拉框。可以定义一些参数,例如最多可选的数量、搜索框的位置等。 总结来说,要使用Layui动态表格带搜索的下拉框,我们需要引入Layui的相关文件,然后在HTML定义表格容器,并在JavaScript使用Layuitable模块进行表格的初始化和渲染。在列属性,我们可以添加一个toolbar属性来定义行的工具栏。可以使用form.on()方法监听下拉框的选事件,并在监听函数处理逻辑。同时,也可以使用formSelects组件来实现多选、搜索等功能的下拉框。通过这些步骤,我们可以方便地实现Layui动态表格带搜索的下拉框的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值