[記] layui 更新單元格內容
阿新 • • 發佈:2021-02-04
總述
- 編輯列內容, 對輸入內容進行校驗, 如校驗失敗, 將單元格內容置空
- 在單元格中插入自定義元素, 並通過操作自定義元素更新表格內容, (通過template在table中插入3個radio, 通過選擇不同按鈕修改表單值)
- 在單元格編輯事件監聽中修改單元格值(需要同時修改table.cache中的值和動態input的value[關鍵])
圖示
- 未選中"修改"時, 修改"新售價", 給出提示, 並將"新售價"置空
- 選中"修改"是, 可以修改"新售價"
- 再次未選中"修改"是, 置空"新售價"
程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Table 表格編輯</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
< meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="layui/css/layui.css" media="all">
</head>
<body>
<table class="layui-table" lay-filter="booksTable" id="booksTable"></table>
<script type="text/html" id="actionTpl">
<input type="radio" name="action-type-name-{{d.seqid}}" value="0" title="無操作" lay-filter="action-type" {{d.actionType === '0' ? 'checked':''}}>
<input type="radio" name="action-type-name-{{d.seqid}}" value="1" title="刪 除" lay-filter="action-type" {{d.actionType === '1' ? 'checked':''}}>
<input type="radio" name="action-type-name-{{d.seqid}}" value="2" title="修 改" lay-filter="action-type" {{d.actionType === '2' ? 'checked':''}}>
</script>
<script src="layui/layui.all.js" charset="utf-8"></script>
<script>
var datas = [
{"seqid": "10001","bookName": "張三專輯","bookPrice": "199","newBookPrice": "","actionType": '0'},
{"seqid": "10002","bookName": "李四專輯","bookPrice": "155","newBookPrice": "","actionType": '0'},
];
var tableOption = {
elem: '#booksTable',
cols: [[
{field: 'seqid',title: '書籍ID',minWidth: 80,sort: true},
{field: 'bookName',title: '資料名',minWidth: 120},
{field: 'bookPrice',title: '售價',minWidth: 120},
// 這裡沒有field, 因為後面更新的時候會把templet弄掉
{title: '操作',minWidth: 220,event: 'action-type-sync',templet: '#actionTpl'},
{field: 'newBookPrice',title: '新售價',minWidth: 100,edit: 'text'}
]],
data: datas,
even: true,
id: 'booksTable',
};
(function() {
var table = layui.table,$ = layui.$;
table.render(tableOption);
//監聽單元格編輯, 校驗單元格輸入
table.on('edit(booksTable)', function(obj) {
var value = obj.value //得到修改後的值
,data = obj.data //得到所在行所有鍵值
,field = obj.field; //得到欄位
console.log(data)
if (field === 'newBookPrice') {
if (data.actionType !== '2') {// 修改按鈕未選中
layer.msg('請調整該記錄的"操作"型別為"修改"後再修改金額.');
// 將cache值置空, 只是修改cache中的值, 不能影響頁面顯示
obj.update({newBookPrice: ''});
// [關鍵] 將輸入框置空, 否則後續監聽器會依據此input的值修改頁面顯示
$(this).val('');
}
}
});
// 監聽單元格事件, 根據選項, 修改金額
table.on('tool(booksTable)', function(obj) {
console.log(118)
var value = $(this).find('input:checked').val();
obj.update({
newBookPrice: value === '2' ? obj.data.newBookPrice : '',
actionType: value
})
});
})();
</script>
</body>
</html>