layui 表格edit編輯及表格數(shù)據(jù)校驗(yàn)功能
table.render({cols:[[{field:'name',title: '姓名',width:120,event:'name'}]]}); //開(kāi)啟event功能二、問(wèn)題
layui.config({完整栗子
base: 'module/'
}).extend({
tableEdit:'js/tableEdit'
}).use(['table','tableEdit'], function () {
var table = layui.table,tableEdit = layui.tableEdit;
});
<table class="layui-hide" id="tableId" lay-filter="tableEvent"></table>效果圖
<script>
layui.config({
base: 'module/'
}).extend({
tableEdit:'js/tableEdit'
}).use(['table','tableEdit','layer'], function () {
var table = layui.table,tableEdit = layui.tableEdit,$ = layui.$;
var params = [{name:1,value:"張三1"},{name:2,value:"張三2"},{name:3,value:"張三3"},{name:4,value:"張三4"},{name:5,value:"張三5"}];
var cols = table.render({
elem: '#tableId'
,id:'id'
,url:'module/json/data.json'
,height: 'full-90'
,page: true
,cols: [[
{type:'checkbox'}
//type的類(lèi)型值:select(下拉框)date(時(shí)間選擇框)input(輸入框)
//input為輸入框,失去焦點(diǎn)會(huì)觸發(fā)回調(diào),aopTable.on()中觸發(fā)的回調(diào)
,{field:'name',title: '輸入框',width:120,event:'name',config:{type:'input'}}
//data 為下拉框數(shù)據(jù)
,{field:'danxuan',align:'center', title: '單選',width:120,event:'danxuan',config:{type:'select',data:params},templet:function (d) {
return d.danxuan && d.danxuan.value ? d.danxuan.value : '';
}}
// enabled => true:多選,false:?jiǎn)芜x。默認(rèn)為false
,{field:'duoxuan', title: '多選',width:120,event:'duoxuan',config:{type:'select',data:params,enabled:true},templet:function (d) {
var str = [];
d.duoxuan.forEach(function (e) {
str.push(e.value)
});
return str.join(' || ');
}}
//dateType表示日期時(shí)間格式,date為“yyyy-MM-dd”,datetime為“yyyy-MM-dd HH:ss:mm”
,{field:'birthday', title: '生日',width:120,event:'birthday',config:{type:'date',dateType:'date'}}
//cascadeSelectField字段為級(jí)聯(lián)開(kāi)關(guān)字段(存在該字段則級(jí)聯(lián),否則不級(jí)聯(lián))
,{field:'xlkjl', title: '下拉框聯(lián)動(dòng)(上級(jí))',width:150,event:'xlkjl',config:{type:'select',data:params,cascadeSelectField:'xialaxiaji'},templet:function (d) {
return d.xlkjl && d.xlkjl.value ? d.xlkjl.value : '';
}}
,{field:'xialaxiaji', title: '下拉框聯(lián)動(dòng)(下級(jí))',width:150,event:'xiaji',config:{type:'select',data:params},templet:function (d) {
return d.xialaxiaji && d.xialaxiaji.value ? d.xialaxiaji.value : '';
}}
,{field:'rqjl', title: '日期聯(lián)動(dòng)(上級(jí))',width:150,event:'rqjl',config:{type:'date',dateType:'date',cascadeSelectField:'rqxiaji'}}
,{field:'rqxiaji', title: '日期框聯(lián)動(dòng)(下級(jí))',width:150,event:'rqxiaji',config:{type:'select',data:params},templet:function (d) {
return d.rqxiaji && d.rqxiaji.value ? d.rqxiaji.value : '';
}}
]]
}).config.cols;
/**
* 參數(shù)cols是table.render({})中的cols屬性值
* aop代理是基于event點(diǎn)擊事件進(jìn)行操作的,因此cols中務(wù)必開(kāi)啟event點(diǎn)擊事件!
**/
var aopTable = tableEdit.aopObj(cols); //獲取一個(gè)aop對(duì)象
/**
* 注意:
* 1、 aopTable.on('tool(xxx)',function (obj) {})
* 2、 table.on('tool(yyy)',function (obj) {})
* 如果1中的xxx與2中的yyy字符串相同時(shí),不能同時(shí)用,用了會(huì)造成后調(diào)用者覆蓋前調(diào)用者。
* 應(yīng)該直接用1來(lái)代替2,因?yàn)?中包含了2中的事件。
* 如果不相同,則可以同時(shí)使用。
**/
aopTable.on('tool(tableEvent)',function (obj) {
var field = obj.field; //單元格字段
var value = obj.value; //修改后的值
var data = obj.data; //當(dāng)前行舊數(shù)據(jù)
var event = obj.event; //當(dāng)前單元格事件屬性值
var update = {};
update[field] = value;
//把value更新到行中
obj.update(update);
/**
*說(shuō)白了,此obj與table.on('tool(tableEvent)',function (obj) {})
*中的obj對(duì)象是同一個(gè),所以可以如此操作。
*
* */
});
/**
* 級(jí)聯(lián)下拉框 => 點(diǎn)擊事件生成下拉框之前的回調(diào)函數(shù)
* 主要用于 => 動(dòng)態(tài)獲取單元格下拉數(shù)據(jù)
* tableEvent => table的lay-filter屬性值
* 如示例代碼所示
*/
tableEdit.on('clickBefore(tableEvent)',function (obj) {
var cascadeSelectData = obj.data; //級(jí)聯(lián)數(shù)據(jù)
var cascadeSelectField = obj.field; //級(jí)聯(lián)字段
if(Array.isArray(cascadeSelectData)){
cascadeSelectData = cascadeSelectData[0];
}
var reslut = null;
//下拉數(shù)據(jù) 只可ajax同步請(qǐng)求后臺(tái)
if(cascadeSelectField === 'rqjl'){ //日期級(jí)聯(lián)下拉框
if(cascadeSelectData === '2020-05-11'){
reslut = {
data:[{name:1,value:'語(yǔ)文'},{name:2,value:'數(shù)學(xué)'},{name:3,value:'英語(yǔ)'},{name:4,value:'物理'},{name:5,value:'化學(xué)'}],
enabled:false //單選 true為多選
};
}else {
reslut = {
data:[{name:6,value:'政治'},{name:7,value:'地理'},{name:8,value:'歷史'},{name:9,value:'生物'},{name:10,value:'音樂(lè)'}],
enabled:false //單選 true為多選
};
}
}else {
if(cascadeSelectData.name+'' === '1'){
reslut = {
data:[{name:11,value:'貴州'},{name:12,value:'云南'},{name:13,value:'四川'},{name:14,value:'湖南'}],
enabled:false //單選 true為多選
};
}else {
reslut = {
data:[{name:15,value:'荊州'},{name:16,value:'揚(yáng)州'},{name:17,value:'杭州'},{name:18,value:'蘇州'}],
enabled:false //單選 true為多選
};
}
}
return reslut;
});
});
</script>