Layui选择框拼音模糊搜索 (包括原始select、formS

2020-03-23  本文已影响0人  senselyan

一、Layui原始select解决

1.问题

layui的下拉框 select自带一个搜索功能,但是真正使用的时候,大部分场景是中文的,这就导致中文匹配不是很方便,更方便的还是拼音模糊搜索,网上有比较成熟的pinyin.js,所以本次文章所解决的是layui自带搜索实现拼音模糊搜索

<div class="layui-input-inline">
  <select name="userId" id="userId" lay-search>
    <option value="">用户</option>
    <option value="001">张三</option>
    <option value="002">李四</option>
    <option value="003">王武</option>
    <option value="004">赵六</option>
    <option value="005">马云</option>
    <option value="006">马化腾</option>
  </select>
</div>

原始效果

2.定位(可跳过)

我们先找到影响的代码部分,form.js,发现这是压缩版的:

所以我们可以下载一个源码版的,在Layui官网的下载页面下有码云链接,可以点进去下载对应form.js的源码https://gitee.com/sentsin/layui/blob/master/src/lay/modules/form.js

然后找到关键判断代码:

3.解决

手写新的判断逻辑:

var pinyinFilter = function(value, text, id) {
    var result;
    if (escape(value).indexOf("%u") != -1) {
        result = text.indexOf(value) > -1;
    } else {
        var len = value.length
        result = ConvertPinyin(text).substring(0, len) === value 
              || makePy(text)[0].toLowerCase().substring(0, len) === value 
              || text.toLowerCase().indexOf(value) > -1 
              || (id === undefined ? false : id.indexOf(value) > -1);
    }
    return !result;
};

// escape(value).indexOf("%u")用来判断是否是中文

引用在之前form.js中关键代码部分:

4.检验

二、layui多选select(formSelects-v4)

1.原始效果

代码:

<div class="layui-input-inline form-values" style="width: 500px;">
  <select name="userId" id="userId" xm-select="xmUserIdSelect" xm-select-search="" lay-search>
    <option value="">用户</option>
    <option value="001">张三</option>
    <option value="002">李四</option>
    <option value="003">王武</option>
    <option value="004">赵六</option>
    <option value="005">马云</option>
    <option value="006">马化腾</option>
  </select>
</div>


<script>
    //全局定义一次, 加载formSelects
    layui.config({
        base: '${base_path}/static/js/' //此处路径请自行处理, 可以使用绝对路径
    }).extend({
        formSelects: 'formSelects-v4'
    });
  
  
    layui.use('formSelects', function() {
        var formSelects = layui.formSelects;
        // 下拉多选
        formSelects.on('xmUserIdSelect', function (id, vals, val, isAdd, isDisabled) {}, true);
    });
</script>

2.定位

我们查看formSelects-v4.js,定位关键位置

3.解决

准备好判断代码(与之前基本一样)

var pinyinFilter_forV4 = function(value, text, id) {
    var result;
    if (escape(value).indexOf("%u") != -1) { //汉字
        result = text.indexOf(value) > -1;
    } else {
        var len = value.length;
        result = ConvertPinyin(text).substring(0, len) === value || makePy(text)[0].toLowerCase().substring(0, len) === value || text.toLowerCase().indexOf(value) > -1 || (id === undefined ? false : id.indexOf(value) > -1);
    }
    return !result;
};

对应位置引入:

4.检验

检验
上一篇下一篇

猜你喜欢

热点阅读