From bec3306dd94c9037e2aa175b88362f1ba62bd866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=A4=E5=BF=83?= <3277200+sentsim@users.noreply.github.com> Date: Mon, 3 Jun 2024 13:42:20 +0800 Subject: [PATCH] chore: Merge branch 'main' of github.com:layui/layui --- docs/flow/detail/options.md | 14 +++++++ docs/table/examples/editModes.md | 10 +++-- src/modules/flow.js | 3 +- src/modules/form.js | 71 +++++++++++--------------------- 4 files changed, 48 insertions(+), 50 deletions(-) diff --git a/docs/flow/detail/options.md b/docs/flow/detail/options.md index 5b245da2..efe46477 100644 --- a/docs/flow/detail/options.md +++ b/docs/flow/detail/options.md @@ -50,6 +50,20 @@ `true` + + + +moreText + + +设置「加载更多」按钮的文本 + + +string + + +加载更多 + diff --git a/docs/table/examples/editModes.md b/docs/table/examples/editModes.md index 5e6c23fd..bab78337 100644 --- a/docs/table/examples/editModes.md +++ b/docs/table/examples/editModes.md @@ -77,13 +77,17 @@ layui.use(function(){ // 原生 select 事件 var tableViewElem = this.elem.next(); - tableViewElem.find('.select-demo-primary').on('change', function(){ + + // 解除 tbSelect 命名空间下的所有 change 事件处理程序 + tableViewElem.off("change.tbSelect"); + // 将 '.select-demo-primary' 元素的 change 事件委托给 tableViewElem, 事件命名空间为 tbSelect + tableViewElem.on("change.tbSelect", ".select-demo-primary", function () { var value = this.value; // 获取选中项 value var data = table.getRowData(options.id, this); // 获取当前行数据(如 id 等字段,以作为数据修改的索引) - + // 更新数据中对应的字段 data.city = value; - + // 显示 - 仅用于演示 layer.msg('选中值: '+ value +'
当前行数据:'+ JSON.stringify(data)); }); diff --git a/src/modules/flow.js b/src/modules/flow.js index 4824306a..6128e27d 100644 --- a/src/modules/flow.js +++ b/src/modules/flow.js @@ -19,6 +19,7 @@ layui.define('jquery', function(exports){ var scrollElem = $(options.scrollElem || document); // 滚动条所在元素 var threshold = 'mb' in options ? options.mb : 50; // 临界距离 var isAuto = 'isAuto' in options ? options.isAuto : true; // 否自动滚动加载 + var moreText = options.moreText || "加载更多"; // 手动加载时,加载更多按钮文案 var end = options.end || '没有更多了'; // “末页”显示文案 var direction = options.direction || 'bottom'; var isTop = direction === 'top'; @@ -30,7 +31,7 @@ layui.define('jquery', function(exports){ var notDocument = options.scrollElem && options.scrollElem !== document; //加载更多 - var ELEM_TEXT = '加载更多' + var ELEM_TEXT = '' + moreText + '' ,more = $('
'+ ELEM_TEXT +'
'); if(!elem.find('.layui-flow-more')[0]){ diff --git a/src/modules/form.js b/src/modules/form.js index 3f8586bc..2e3074e9 100644 --- a/src/modules/form.js +++ b/src/modules/form.js @@ -534,50 +534,27 @@ layui.define(['lay', 'layer', 'util'], function(exports){ } // 标注 dd 的选中状态 - var setThisDd = function(prevNext, thisElem1){ - var nearDd, cacheNearElem + var setThisDd = function(prevNext){ e.preventDefault(); + var allDisplayedElem = dl.children('dd:not(.'+ HIDE +',.'+ DISABLED +')'); + if(!allDisplayedElem.length) return; + var firstIndex = 0; + var lastIndex = allDisplayedElem.length - 1; + var selectedIndex = -1; - // 得到当前队列元素 - var thisElem = function(){ - var thisDd = dl.children('dd.'+ THIS); - - // 如果是搜索状态,且按 Down 键,且当前可视 dd 元素在选中元素之前, - // 则将当前可视 dd 元素的上一个元素作为虚拟的当前选中元素,以保证递归不中断 - if(dl.children('dd.'+ HIDE)[0] && prevNext === 'next'){ - var showDd = dl.children('dd:not(.'+ HIDE +',.'+ DISABLED +')') - ,firstIndex = showDd.eq(0).index(); - if(firstIndex >=0 && firstIndex < thisDd.index() && !showDd.hasClass(THIS)){ - return showDd.eq(0).prev()[0] ? showDd.eq(0).prev() : dl.children(':last'); - } + layui.each(allDisplayedElem, function(index, el){ + if($(el).hasClass(THIS)){ + selectedIndex = index; + return true; } + }) + + var nextIndex = prevNext === 'prev' + ? (selectedIndex - 1 < firstIndex ? lastIndex : selectedIndex - 1) + : (selectedIndex + 1 > lastIndex ? firstIndex : selectedIndex + 1) - if(thisElem1 && thisElem1[0]){ - return thisElem1; - } - if(nearElem && nearElem[0]){ - return nearElem; - } - - return thisDd; - // return dds.eq(index); - }(); - - cacheNearElem = thisElem[prevNext](); // 当前元素的附近元素 - nearDd = thisElem[prevNext]('dd:not(.'+ HIDE +')'); // 当前可视元素的 dd 元素 - - // 如果附近的元素不存在,则停止执行,并清空 nearElem - if(!cacheNearElem[0]) return nearElem = null; - - // 记录附近的元素,让其成为下一个当前元素 - nearElem = thisElem[prevNext](); - - // 如果附近不是 dd ,或者附近的 dd 元素是禁用状态,则进入递归查找 - if((!nearDd[0] || nearDd.hasClass(DISABLED)) && nearElem[0]){ - return setThisDd(prevNext, nearElem); - } - - nearDd.addClass(THIS).siblings().removeClass(THIS); // 标注样式 + var selectedElem = allDisplayedElem.eq(nextIndex); + selectedElem.addClass(THIS).siblings().removeClass(THIS); // 标注样式 followScroll(); // 定位滚动条 }; @@ -658,9 +635,11 @@ layui.define(['lay', 'layer', 'util'], function(exports){ if(createOptionElem[0]){ createOptionElem.attr('lay-value', value).html(util.escape(value)); }else{ - var ddElem = $('
'); - ddElem.addClass(CREATE_OPTION).attr('lay-value', value).html(util.escape(value)); - dl.append(ddElem); + // 临时显示在顶部 + var ddElem = $('
').addClass(CREATE_OPTION).attr('lay-value', value).html(util.escape(value)); + var firstOptionELem = dl.children().eq(0); + var hasTips = firstOptionELem.hasClass('layui-select-tips'); + firstOptionELem[hasTips ? 'after' : 'before'](ddElem); } } }else{ @@ -719,10 +698,10 @@ layui.define(['lay', 'layer', 'util'], function(exports){ othis.addClass(THIS); } + // 将新增的 option 元素添加到末尾 if(isCreatable && othis.hasClass(CREATE_OPTION)){ - othis.removeClass(CREATE_OPTION); - var optionElem = $('