layui穿梭框內容溢位解決辦法
阿新 • • 發佈:2020-11-30
今天在弄穿梭框的時候,發現內容溢位,如下圖所示:
設定程式碼如下:
layui.use(['transfer', 'form', 'layer','util'], function () { var form = layui.form , layer = layui.layer , transfer=layui.transfer , util=layui.util ; //模擬資料 var data1 = [ {"value": "1", "title": "李白"} ,{"value": "2", "title": "杜甫"} ,{"value": "3", "title": "蘇軾"} ,{"value": "4", "title": "李清照"} ,{"value": "5", "title": "魯迅", "disabled": true} ,{"value": "6", "title": "巴金"} ,{"value": "7", "title": "冰心"} ,{"value": "8", "title": "矛盾"} ,{"value": "9", "title": "賢心"} ,{"value": "10", "title": "巴金"} ,{"value": "11", "title": "冰心"} ,{"value": "12", "title": "矛盾"} ,{"value": "13", "title": "賢心"} ] transfer.render({ elem:'#demo', title:['待選角色','已選角色'], data:data1, id:'transferbox_item', //showSearch: true, height: 300 //定義高度 }); });
發現不設定showSearch為true的時候,也就是不顯示搜尋框的時候,內容會溢位,顯示搜尋框的時候,內容不會溢位。
於是查看了一下transfer.js的程式碼,發現內容框的高度是通過js設定的,在設定內容框高度的時候,與搜尋框的高度有關,但此時無搜尋框,獲取不了搜尋框的高度,於是程式碼就出現了bug。
原始碼如下所示:
x.prototype.render = function() { var e = this, n = e.config, i = e.elem = a(t(v).render({ data: n, index: e.index })), l = n.elem = a(n.elem); l[0] && (n.data = n.data || [], n.value = n.value || [], e.key = n.id || e.index, l.html(e.elem), e.layBox = e.elem.find("." + s), e.layHeader = e.elem.find("." + u), e.laySearch = e.elem.find("." + h), e.layData = i.find("." + y), e.layBtn = i.find("." + f + " .layui-btn"), e.layBox.css({ width: n.width, height: n.height }), e.layData.css({
//在此設定內容框的高度 height: function() {
//e.laySearch.outerHeight()為搜尋框的高度 return n.height - e.layHeader.outerHeight() - e.laySearch.outerHeight() - 2 } () }), e.renderData(), e.events()) },
於是稍改程式碼,做了一個空判斷,即可正確顯示內容框的高度,如下所示:
e.layData.css({ //在此設定內容框的高度 height: function() { //e.laySearch.outerHeight()為搜尋框的高度 return n.height - e.layHeader.outerHeight() - (e.laySearch.outerHeight()||0) - 2 } () })