小編給大家分享一下layui中如何使用table插件進(jìn)行復(fù)選框聯(lián)動(dòng)功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),靈山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:靈山等地區(qū)。靈山做網(wǎng)站價(jià)格咨詢:028-86922220實(shí)際項(xiàng)目功能:
給員工賬號進(jìn)行分配權(quán)限(增加權(quán)限,修改權(quán)限)
實(shí)現(xiàn)思路:
用表格展示權(quán)限列表–>勾選分配該賬號的權(quán)限–>調(diào)用接口
出現(xiàn)的問題:
因?yàn)槟承?quán)限之間是有關(guān)聯(lián)的,比如: “ 查看材料 ” 和 “ 修改材料 ” ,這兩個(gè)權(quán)限是有聯(lián)系的,當(dāng)你勾選 “ 修改材料 ” 權(quán)限的時(shí)候,那么, “ 查看材料 ” 權(quán)限也要勾選上,當(dāng)你取消勾選 “ 查看材料 ”權(quán)限的時(shí)候,“ 修改材料 ” 權(quán)限也要取消。
所以當(dāng)用戶勾選某個(gè)權(quán)限的時(shí)候,我們要通過js代碼去判斷是否有和這個(gè)權(quán)限相關(guān)的權(quán)限,如果有,就需要通過js代碼自動(dòng)勾選或取消勾選。
而layui的table插件沒有提供通過js代碼自動(dòng)勾選或取消勾選復(fù)選框的方法;
解決方案:
通過table的reload方法和form的render方法實(shí)現(xiàn)
思路:
//以查看材料和修改材料權(quán)限為例:查看材料的id為2,修改材料的id為3 //用戶點(diǎn)擊復(fù)選框時(shí),觸發(fā)的回調(diào)函數(shù) table.on('checkbox(quanXianAll)', function(obj) { //判斷是否是全選 if (obj.type === "one") { //判斷判斷選中的權(quán)限是否為“修改材料” if (obj.data.id === 3) { //判斷是否選中狀態(tài) if (obj.checked) { tableIns.reload({ data:data, done: function (res) { //根據(jù)“查看材料”權(quán)限的id獲取的索引 var n = res.data.findIndex(function (item, i) { if (item.id === 2) { return true } }) //判斷查看材料”權(quán)限是否已被勾選 if(!res.data[n].LAY_CHECKED){ res.data[n].LAY_CHECKED = true; $(".layui-table-body").find("tr[data-index=" + n + "]").find('input[name="layTableCheckbox"]').prop("checked", true); form.render('checkbox'); } } }) } } } })
這種關(guān)聯(lián)肯定不止一個(gè),所以我們要把代碼進(jìn)行封裝。(思路應(yīng)該說明白了,代碼就不再進(jìn)行這里封裝了)
在table的源文件中添加一個(gè)這樣的方法
在table源碼中的a.elem.on("click", 'input[name="layTableCheckbox"]+', function () {}方法內(nèi),添加以下方法
var mylaysetCheck= function (index,checked,callbacks) { var e=t("table[lay-filter="+f+"]").next().find(".layui-table-box").find(".layui-table-main").find("tr[data-index="+index+"]"), l = e.parents("tr").eq(0).data("index"), n = e[0].checked, o = "layTableAllChoose" === e.attr("lay-filter"); e.find('input[name="layTableCheckbox"]').prop("checked",checked); if(callbacks){ this.setCheckData(index, checked), this.syncCheckAll();a.renderForm("checkbox"); layui.event.call(this, s, "checkbox(" + f + ")", { checked: n, data: d.cache[a.key] ? d.cache[a.key][l] || {} : {}, type: o ? "all" : "one", mysetCheck:mylaysetCheck.bind(a) }) }else { this.setCheckData(index, checked), this.syncCheckAll();a.renderForm("checkbox"); } };
在table源碼中
a.elem.on("click", 'input[name="layTableCheckbox"]+', function () {}方法內(nèi)有一個(gè)layui.event.call()函數(shù)===> 源碼為: layui.event.call(this, s, "checkbox(" + f + ")", { checked: n, data: d.cache[a.key] ? d.cache[a.key][l] || {} : {}, type: o ? "all" : "one" })
改為:
layui.event.call(this, s, "checkbox(" + f + ")", { checked: n, data: d.cache[a.key] ? d.cache[a.key][l] || {} : {}, type: o ? "all" : "one", mysetCheck:mylaysetCheck.bind(a) })
通過以下代碼調(diào)用
//用戶點(diǎn)擊復(fù)選框時(shí),觸發(fā)的回調(diào)函數(shù) table.on('checkbox(test)', function(obj){ //兩個(gè)參數(shù),第一個(gè)是數(shù)組的索引,第二個(gè)是是否勾選,第三個(gè)是否使用回調(diào)函數(shù) obj.mysetCheck(index,checked,callbacks); }); //案例:查看材料的id為2,索引為2;修改材料的id為3,索引為3 table.on('checkbox(quanXianAll)', function(obj){ if(obj.data.id===3&&obj.checked){ obj.mysetCheck(2,true,true); } if(obj.data.id===2&&!obj.checked){ obj.mysetCheck(3,false,true); } }); //這樣就可以實(shí)現(xiàn):勾選“修改材料”時(shí)也會(huì)把“查看材料”勾選上,取消勾選“查看材料”時(shí)也會(huì)取消“修改材料”的勾選
對比:
第一種方法不用修改源碼,但代碼量多,且不是局部刷新;
第二種方法是局部刷新,代碼不多,但是修改源碼,設(shè)計(jì)到版本遷移的問題,且業(yè)務(wù)邏輯錯(cuò)誤,容易發(fā)生無限循環(huán);
以上是“l(fā)ayui中如何使用table插件進(jìn)行復(fù)選框聯(lián)動(dòng)功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!