layui table内嵌入select

layui数据表格没有支持select的参数,因此需要手动加入模板进去到td中,具体使用方法如下

HTML
<script type="text/html" id="selectTool">
		 <select name="materialtype" lay-filter="materialtype" id="materialtype">
					<option value="">请选择或输入</option>
		        {{# layui.each(d.lstSet, function(index, item){ }}
					<option value="{{ item.SettingKey }}">{{ item.SettingValue }}</option>
		        {{# }); }}
		    </select>
</script>

其中:d.lstSet是后台传表格数据时带入的一个数组。
关于{{#等字符是layui的模板引擎,参考地址:https://www.layui.com/doc/modules/laytpl.html
如果使用了数据表格layui-table则不要自定义分隔符,会乱码

JS
function getMateralNameList() {
			var re = table.render({
				elem: '#material-name-list',
				url: materialNameListUrl,
				cellMinWidth: 80,
				// width: '150px',
				id: 'tongMaterialinfoID',
				height: '400px',
				toolbar: '#toolbarAdd', //开启头部工具栏,并为其绑定左侧模板
				defaultToolbar: [], //去掉打印等功能
				end: function(e) {
					form.render();
				},
				done: function(res) {
					form.render('select');
					tongMaterialNameData = res.data;
					setTimeout(function(){
						tongMaterialNameData.forEach(function(item, index) { //根据已有的值回填下拉框
							layui.each(o("select[name='materialtype']", ""), function(index, item) {
								var elem = o(item);
								elem.next().children().children()[0].defaultValue = tongMaterialNameData[index].MaterialName;
							});
							table.render('select');
						})
					},1000)
				},
				cols: [
					[{
							field: 'No',
							title: 'No',
							type: 'numbers',
							width: 40,
						}]
				]
			});
		}
		//select改变对应的表格数据里面的值也要改变
		form.on('select(materialtypeFilter)', function(data) {
			//获取当前行tr对象
			var elem = data.othis.parents('tr');
			//第一列的值是Guid,取guid来判断
			var Guid = elem.first().find('td').eq(0).text();
			//选择的select对象值;
			var selectValue = data.value;
			for (i = 0; i < tongMaterialNameData.length; i++) {
				if (tongMaterialNameData[i].ID == Guid) {
					tongMaterialNameData[i].MaterialType = selectValue; //更新被修改的行数据
				}
			}
		})
CSS
/* 防止下拉框的下拉列表被隐藏---必须设置--- 此样式和表格的样式有冲突  */
/* 防止下拉框的下拉列表被隐藏---必须设置--- 此样式和表格的样式有冲突 
如果表格列数太多 会出现错乱的情况 目前我的解决方法是忽略下拉框的美化渲染 <select lay-ignore> */
#tongConfig #materialNameList .layui-table-cell {
	overflow: visible;
}
#tongConfig #materialNameList .layui-table-box {
	overflow: visible;
}

#tongConfig #materialNameList .layui-table-body {
	overflow: visible;
}

/* 设置下拉框的高度与表格单元相同 */
#tongConfig #materialNameList td .layui-form-select {
	margin-top: -10px;
	margin-left: -15px;
	margin-right: -15px;
}

#tongConfig #materialNameList .layui-table-view .layui-table th{
        overflow:hidden;
}
/* 去掉select td的悬浮下拉框 */
#tongConfig #materialNameList .layui-table-grid-down{
	display: none;
}

上面的仅供参考,使用时定位到自己table的地方

要在Layui的表格中设置带有下拉框的单元格,可以使用Layui的form模块中的select组件来实现。 首先,在表格中的需要添加下拉框的单元格中添加一个select元素,并设置其id属性。 然后,在LayuiJavaScript代码中,使用form.render方法对表单进行渲染,以便让下拉框组件生效。 最后,使用table.on('edit')方法监听单元格编辑事件,当编辑的单元格是下拉框单元格时,使用form.val方法动态修改下拉框的选中值。 下面是一个示例代码: ``` // HTML代码 <table class="layui-table"> <thead> <tr> <th>姓名</th> <th>性别</th> <th>年龄</th> </tr> </thead> <tbody> <tr> <td>张三</td> <td><select id="sex-select"><option value="1">男</option><option value="2">女</option></select></td> <td>20</td> </tr> <tr> <td>李四</td> <td><select id="sex-select"><option value="1">男</option><option value="2">女</option></select></td> <td>22</td> </tr> </tbody> </table> // JavaScript代码 layui.use(['table', 'form'], function() { var table = layui.table; var form = layui.form; // 渲染表单 form.render(); // 监听单元格编辑事件 table.on('edit', function(obj) { var value = obj.value; // 获取编辑后的值 var field = obj.field; // 获取编辑的字段名 var data = obj.data; // 获取当前行的数据 // 如果是性别下拉框单元格被编辑 if (field === 'sex') { // 动态修改下拉框的选中值 form.val('sex-select', { sex: value }); } }); }); ``` 需要注意的是,为了避免多个单元格使用同一个id属性值,应该为每个下拉框单元格分配一个唯一的id属性值。另外,也可以使用name属性来标识下拉框组件,以便在form.val方法中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Swn_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值