input 配合 select 控件实现搜索功能

x33g5p2x  于2021-11-11 转载在 其他  
字(2.7k)|赞(0)|评价(0)|浏览(174)

一 需求

select 控件实现从30万家医院中选择指定医院。如果单独使用 select 控件,会产生性能问题,会使得前端页面选择卡顿,服务器压力增加,因为需要查出30万条数据,因此需要其他控件配合使用。

方案一

采用省、市、区级联选择的方式选择出指定医院,采用该方案的缺点是: 如果不知道该医院所在的省市区,将无从选择。

方案二

使用一个 input 输入框,用来输入关键字,通过模糊查询,筛选出少量医院,从而完成医院选择。

二 核心代码

1 HTML部分

<div class="form-group pull-left" style="margin-left:15px;margin-top: 10px;">
    <input type="text" class="form-control input-sm" style="width:100px"
           id="objectKey" name="objectKey" placeholder="搜索条件">
</div>

<div class="form-group pull-left" style="margin-left:15px;margin-top: 10px;">
    <select id="visitDataId" name="visitDataId" style="width:130px">
        <option value="">请输入搜索条件</option>
    </select>
</div>

2 JS部分

实现 visitDataId 单击事件和 objectKey 的失去焦点事件

$("#visitDataId").click(function (e) {
    if (isEmpty($('#objectKey').val())) {
        alert("请输入搜索条件")
        return;
    } else {
        loadObjct();
    }
});

$("#objectKey").blur(function (e) {
    if (isEmpty($('#objectKey').val())) {
        alert("请输入搜索条件")
        return;
    } else {
        loadObjct();
    }
});

加载医院对象到 visitDataId 中

// 加载对象
function loadObjct() {
    loadServiceObj('visitDataId', curYpdRows.indexCode, curYpdRows.area);
}

// 加载医院对象
function loadServiceObj(id, indexCode, area, value) {
    var url;
    if (isEmpty($('#objectKey').val())) {
        url = 'oms/hospital/list?province=' + area + '&checkState=1';
    } else {
        url = 'oms/hospital/list?province=' + area + '&checkState=1&name_like=%25' + $('#objectKey').val() + '%25';
    }

    $.ajax({
        type: "get", // 请求方式
        url: url, // 发送请求地址
        dataType: "json",
        error: function () {
            myAlert("温馨提示", "连接服务器超时,请稍后重试...");
        },
        success: function (result) {
            if (result.total > 0) {
                $("#" + id).html("");
                $("#" + id).append("<option value=''>请选择服务对象</option>");
            } else {
                $("#" + id).html("");
                $("#" + id).append("<option value=''>请输入搜索条件</option>");
            }
            sortChinese(result.rows, 'name');
            for (var i = 0; i < result.total; i++) {
                // 加载父节点数据到新增页面
                $("#" + id).append("<option " + (value == result.rows[i].id ? "selected" : "") + " value='" + result.rows[i].id + "'>" + result.rows[i].name + "</option>");
            }
            $('#' + id).select2({
                language: "zh-CN",
                width: '200px'
            });
        }
    });
}

关闭窗口时,调用下面函数,清空相关控件数据

// 清除数据
function clearData() {
    $("#visitDataId").html("");
    $("#visitDataId").select2("val", "");
    $("#visitDataId").append("<option value=''>请输入搜索条件</option>");
    $('#objectKey').val("")
}

三 测试效果

1 进入页面效果

2 input 不输入,失去焦点,弹出对话框

**3 input 不输入,单击 select 控件,弹出会话框 **

4 关键字输入 协和,失去焦点后,发送Ajax请求到后台,在 select 中填充数据

5 select 控件选择满足条件的医院 北京协和医院,完成需求

相关文章

微信公众号

最新文章

更多