layui实现地址下拉框模糊查询

layui实现地址下拉框模糊查询

HTML代码

注意:千万不要少 lay-search

csharp 复制代码
<div class="layui-col-md4">
   <label class="layui-form-label"><em>*</em>始发地:</label>
   <div class="layui-input-block layui-form" lay-filter="OD_START_LAND">
       <select name="OD_START_LAND" id="OD_START_LAND" lay-filter="OD_START_LAND" lay-verify="required" lay-search>
           <option value="">请输入</option>
       </select>
   </div>
</div>

js代码

javascript 复制代码
   selectLike({
            id: "OD_START_LAND",
            url: "/Basic/GetAreaDrop",
            paramKey: "name",
            currValue: startValue,//当前值,用于编辑时赋值或赋默认值
            pageSize: 30, //最大检索行数默认为10行
            option: {
                keyField: "ID",
                textField: "FULL_CNAME"
            },
            //keyCode: [32],
            timer: 500  //输入完成后自动触发检索的时间间隔(毫秒)
        });

selectLike的底层配置

javascript 复制代码
function selectLike(obj) {
    var lastTimer = 0;
    //参数
    var oldValue = "";
    var pramas = { pageSize: obj.pageSize || 10 };
    //值为空时
    if (typeof obj.currValue === "undefined" || obj.currValue === null || obj.currValue === "") {
        pramas[obj.paramKey] = oldValue;
        form.render("select", obj.id);
        //$("#" + obj.id).next().find("input").unbind('keyup').on('keyup', function () {
        //    var val = (this.value || "").trim();
        //    inputKeyup(val);
        //});
        if (obj.keyCode && obj.keyCode.push) {
            //柑橘按键检索
            $("#" + obj.id).next().find("input").on('keydown', function () {
                var val = (this.value || "").trim();
                //配置查询键位,需用code判断
                var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
                if (obj.keyCode.indexOf(keyCode) >= 0) {
                    inputKeyup(val);
                    return false;
                }
            });
        } else {
            $("#" + obj.id).next().find("input").on('keyup', function () {
                var val = (this.value || "").trim();
                inputKeyup(val);
            });
        }
    } else {
        oldValue = obj.currValue;
        pramas[obj.paramKey] = oldValue;
        getData(pramas);
    }

    function inputKeyup(val) {
        //判断是否有timer,有,清除原有的timer,创建新的timer
        if (lastTimer != 0) clearTimeout(lastTimer);
        lastTimer = setTimeout(function () {
            if (val && val != oldValue) {
                oldValue = val;
                pramas[obj.paramKey] = oldValue;
                getData(pramas);
            }
        }, obj.timer || 200);
    }

    function getData(pramas) {
        $.ajax({
            type: "POST",
            url: obj.url,
            data: pramas,
            success: function (data) {
                //添加默认元素
                $("#" + obj.id).empty().append(new Option("", ""));
                $.each(data, function (index, item) {
                    if (item[obj.option.keyField] == obj.currValue)
                        $("#" + obj.id).append(new Option(item[obj.option.textField], item[obj.option.keyField], true, true));
                    else $("#" + obj.id).append(new Option(item[obj.option.textField], item[obj.option.keyField]));
                });
                var currValue = $("#" + obj.id).next().find("input").val();
                form.render("select", obj.id);
                //从新绑定事件
                //$("#" + obj.id).next().find("input").on('keyup', function () {
                //    var val = (this.value || "").trim();
                //    inputKeyup(val);
                //});
                if (obj.keyCode && obj.keyCode.push) {
                    $("#" + obj.id).next().find("input").on('keydown', function () {
                        var val = (this.value || "").trim();
                        //配置查询键位,需用code判断
                        var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
                        if (obj.keyCode.indexOf(keyCode) >= 0) {
                            inputKeyup(val);
                            return false;
                        }
                    });
                } else {
                    $("#" + obj.id).next().find("input").on('keyup', function () {
                        var val = (this.value || "").trim();
                        inputKeyup(val);
                    });
                }
                //input赋值
                if (typeof obj.currValue === "undefined" || obj.currValue === null) {
                    $("#" + obj.id).next().find("input").val(currValue);
                    $("#" + obj.id).next().find("input").trigger('click').trigger('focus');
                }
                obj.currValue = undefined;
            }
        });
    }
}

后端代码

控制器中

csharp 复制代码
/// <summary>
/// 地区下拉框
/// </summary>
/// <param name="name"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
[HttpPost]
public ActionResult GetAreaDrop(string name, int pageSize = 30)
{
    List<BasicArea> data = new BasicAreaService().GetAreaDrop(name, pageSize);
    return ContentJsonString(JsonConvert.SerializeObject(data));
}

service层

csharp 复制代码
 public List<BasicArea> GetAreaDrop(string name, int pageSize)
 {
       string sql = @"SELECT ID, AREA_CODE ,FULL_CNAME  FROM BASIC_AREA where  FULL_CNAME is not null AND ISDEL='0' ";
       if (!string.IsNullOrEmpty(name))
       {
           name = name.Replace("'", "");
           sql += $" and (FULL_CNAME like '%{name}%' or  AREA_CODE='{name}' OR to_char(ID)='{name}')";
       }
       List<BasicArea> data = Db.SqlQueryable<BasicArea>(sql).ToList();
       return data;
   }

实现的效果图

相关推荐
程序员爱钓鱼3 小时前
Node.js 编程实战:文件读写操作
前端·后端·node.js
PineappleCoder3 小时前
工程化必备!SVG 雪碧图的最佳实践:ID 引用 + 缓存友好,无需手动算坐标
前端·性能优化
JIngJaneIL3 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码3 小时前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
澄江静如练_4 小时前
列表渲染(v-for)
前端·javascript·vue.js
JustHappy4 小时前
「chrome extensions🛠️」我写了一个超级简单的浏览器插件Vue开发模板
前端·javascript·github
Loo国昌4 小时前
Vue 3 前端工程化:架构、核心原理与生产实践
前端·vue.js·架构
sg_knight4 小时前
拥抱未来:ECMAScript Modules (ESM) 深度解析
开发语言·前端·javascript·vue·ecmascript·web·esm
LYFlied4 小时前
【每日算法】LeetCode 17. 电话号码的字母组合
前端·算法·leetcode·面试·职场和发展