LAYUI好像不维护了啊啊啊,但是我觉得这个优化思路还是值得借鉴的,共勉。
背景:LAYUI SELECT标签加上 lay-search属性就可以实现下拉的搜索功能,但是实际这个比较鸡肋,第二次搜索的时候搜索框内容不会置空,只有单一选项的时候还需要下拉选择上才能回车选中。
这边针对这两项进行优化。工具 idea 2019.3
步骤:
1、打开form.js,因为是有压缩的,所以可以使用ctrl+alt+L对代码进行格式化。没有用idea的小伙伴也可以找网页在线格式化就好,这样修改起来方便好多,也可以留下明显的修改记录。我的格式化后大致如图,可能会略有差异不影响。
2、修改再次点到搜索框是内容清空的问题。其实封装的代码读起来还是有点困难的,所以需要结合前端调试。后续我找到大概在78行m的click方法里面,将框的内容置空就好了,这一块改起来还是比较简单的。大致的代码位置如图
在这个方法里面加一条k.val('');即可。如图
3、如果搜索后只有一个选项,默认该选项的优化。优化后操作体验有提升
修改的代码块在72行T方法里面,这个是输入搜索内容执行的方法。
修改后的代码情况
这一块的代码我贴一下。

T = function () { /* modify begin **/ /** * V.1.1优化 当搜索返回选项只有一条时,默认选择该项 * 1、获取所有下拉项 * 2、获取搜索后隐藏的下拉项(搜索过滤掉的) * 3、判断过滤后是否只有单一选项 if(ds.length == os.length + 1) * 4、之前有选择且搜索被剔除的选项,需将class有layui-this layui-hide 修改为layui-hide * 5、搜索返回的单一选项之前未被选择则class为空,将其class置未layui-this */ var ds = g.children('dd'); var os = g.children('dd.' + o); if(ds.length == os.length + 1) { // 搜索选项只有一个的情况 for(var iu = 0; iu < ds.length; iu ++) { var cn = ds[iu].className; if(cn.indexOf(o) > -1 && cn.indexOf(s) > -1) { // 搜索剔除且之前选择的 ds[iu].className = o; } else if(cn.length == 0) { // 单一选项且之前未被选择 ds[iu].className = s; } } } /* modify end **/ var e = g.children("dd." + s); if (e[0]) { var t = e.position().top, i = g.height(), a = e.height(); t > i && g.scrollTop(t + g.scrollTop() - i + a - 5), t < 0 && g.scrollTop(t + g.scrollTop() - 5) } };
这里我做个小小总结吧,各位小伙伴遇到任何问题都不要慌,慢慢来,仔细思考都能解决的,心不浮气不躁,我们能行的,在工作中不断提升自己,生活不也就是这样。
行吧,也没有特别多的细节。如果再遇不到你,祝你早安,午安,晚安。
若想与我谈些人生大事请评论或邮件ztangbin@163.com ,等你哈。