溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

layui中如何使用table插件進行復選框聯動功能

發布時間:2021-06-29 14:50:43 來源:億速云 閱讀:232 作者:小新 欄目:web開發

小編給大家分享一下layui中如何使用table插件進行復選框聯動功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

實際項目功能:

給員工賬號進行分配權限(增加權限,修改權限)

實現思路:

用表格展示權限列表–>勾選分配該賬號的權限–>調用接口

出現的問題:

因為某些權限之間是有關聯的,比如: “ 查看材料 ” 和 “ 修改材料 ” ,這兩個權限是有聯系的,當你勾選 “ 修改材料 ” 權限的時候,那么, “ 查看材料 ” 權限也要勾選上,當你取消勾選 “ 查看材料 ”權限的時候,“ 修改材料 ” 權限也要取消。

所以當用戶勾選某個權限的時候,我們要通過js代碼去判斷是否有和這個權限相關的權限,如果有,就需要通過js代碼自動勾選或取消勾選。

而layui的table插件沒有提供通過js代碼自動勾選或取消勾選復選框的方法;

解決方案:

通過table的reload方法和form的render方法實現

思路:

//以查看材料和修改材料權限為例:查看材料的id為2,修改材料的id為3
//用戶點擊復選框時,觸發的回調函數
table.on('checkbox(quanXianAll)', function(obj) {
 //判斷是否是全選
 if (obj.type === "one") {
   //判斷判斷選中的權限是否為“修改材料”
   if (obj.data.id === 3) {
    //判斷是否選中狀態
    if (obj.checked) {
     tableIns.reload({
      data:data,
      done: function (res) {
       //根據“查看材料”權限的id獲取的索引
       var n = res.data.findIndex(function (item, i) {
        if (item.id === 2) {
         return true
        }
       })
       //判斷查看材料”權限是否已被勾選
       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');
       }

      }
     })
    }
   }
  }
})

這種關聯肯定不止一個,所以我們要把代碼進行封裝。(思路應該說明白了,代碼就不再進行這里封裝了)

在table的源文件中添加一個這樣的方法

在table源碼中的a.elem.on("click", 'input[name="layTableCheckbox"]+', function () {}方法內,添加以下方法

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 () {}方法內有一個layui.event.call()函數===> 源碼為:

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)
})

通過以下代碼調用

//用戶點擊復選框時,觸發的回調函數
table.on('checkbox(test)', function(obj){
 //兩個參數,第一個是數組的索引,第二個是是否勾選,第三個是否使用回調函數
 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);
 }

});
//這樣就可以實現:勾選“修改材料”時也會把“查看材料”勾選上,取消勾選“查看材料”時也會取消“修改材料”的勾選

對比:

第一種方法不用修改源碼,但代碼量多,且不是局部刷新;

第二種方法是局部刷新,代碼不多,但是修改源碼,設計到版本遷移的問題,且業務邏輯錯誤,容易發生無限循環;

以上是“layui中如何使用table插件進行復選框聯動功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女