美文网首页
自定义下拉框联动查询

自定义下拉框联动查询

作者: 五岁小孩 | 来源:发表于2021-02-14 19:45 被阅读0次

    <center><font size="5"> 自定义输入下拉框联动查询</center></font>

    html

    该div只有部分样式,其中input 中class为 input-select 必须有

    该 ul 的class必须添加 ul下的li的内容及其自定义属性自行定义

       <script type="text/javascript" src="/assets/js/jquery-1.11.1.min.js"></script>
       <link href="input-select.css" rel="stylesheet" type="text/css" />
       <script src="input-select.js"></script>
       <script src="test-mail.js"></script>
    
    <div class="form-group">
           <label for="Name" class="col-sm-2 control-label form-label">
               {{TPFunTi18nLang $.i18n.lang "data" "export.setting.tb.name"}}
           </label>
           <div class="col-sm-6">
               <input type="text" class="form-control input-select margin-b-5" value=""
                      id="input-select">
    
               <ul class="input-select-ul">
                   <li value="" >没有数据</li>
               </ul>
           </div>
    </div>
    

    css

    input-select.css

    .input-select-ul{
        display: none;
        width: 96%;
        margin-left: 2px;
        list-style: none;
        position: absolute;
        padding: 5px 0;
        border: 0.1rem solid #0b87e3;
       /* border-top: 0;*/
        z-index: 1000;
        background-color: #ffffff;
    }
    .input-select-ul li{
        display: block;
        padding: 2px 5px;
        color: #000;
        text-decoration: none;
    }
    .input-select-ul li:hover{
        background-color: #399bff;
        color: #000;
    }
    
    

    js

    input-select.js

    $(function () {
    
        //监听输入框获取焦点事件
        // $(".input-select").focus(function () {
        //     $(this).siblings(".input-select-ul").show()
        // });
        //监听输入框的点击事件
        $(".input-select").on('click',function () {
            $(this).siblings(".input-select-ul").show()
        });
        //监听鼠标离开ul时监听事件
        $(".input-select-ul").mouseleave(function () {
            $(this).hide();
        });
        //监听li的点击事件
        // $(".input-select-ul li").on("click",function(){      //只需要找到你点击的是哪个ul里面的就行
        //     //输入框赋值
        //     $(this).parent().prev().val($(this).attr("value"));
        //     //隐藏下拉框
        //     $(this).parent().hide()
        // });
        $(document).on('click', '.input-select-ul li', function() {
            //输入框赋值
            $(this).parent().prev().val($(this).attr("value"));
            //隐藏下拉框
            $(this).parent().hide()
        });
    
    });
    /**
     * @function (通用方法,页面初始化时调用即可)根据指定搜索的值和指定搜索的字段从数组searchData中查询数据
     *@param domId  页面input的id
     *@param searchData 搜索的数据源
     * @param searchAttr 搜索的字段,多个字段以逗号分开
     * @param isLike   是否模糊查询;true-模糊匹配,false-完全匹配;默认false
     * @param showDefaultNum 当监听到input的值为空时显示默认条数,如果为0则默认不显示
     * @param noRewordTips  当搜索数据为空的提示信息
     * @param initUl  是否需要初始化Ul,默认不初始化,由于样式问题不建议初始化
     */
    function initInputSelect(domId, searchData, searchAttr, isLike, showDefaultNum, noRewordTips,initUl) {
    
        //check input的id,搜索的原数据不能为空
        if (domId === "" || searchData === "" ||searchData.length===undefined || searchData.length <= 0 || searchAttr === "") {
            return
        }
        //默认模糊匹配
        if (isLike === "") {
            isLike = false
        }
        //默认当输入的值为空时显示5条,为0时不显示
        if (showDefaultNum === "" || parseInt(showDefaultNum) === undefined) {
            showDefaultNum = 5
        }
        //默认空记录显示信息
        if (noRewordTips===""){
            noRewordTips="没有检索到任何记录"
        }
        //默认不初始化
        if (initUl===""){
            initUl=false
        }
        //初始化 ul和li
        if (initUl===true){
            let ulHtml="<ul class=\"input-select-ul\" style=\"width: 99%;margin-top: -10px\">\n" +
                "<li value=\"\" >"+noRewordTips+"</li>\n" +
                "</ul>";
            $("#" + domId).after(ulHtml)
        }
        //默认li中的名称为搜索的字段的名称(多个时默认第一个)
        let defaultLiName = searchAttr.split(",")[0];
        //监听输入的输入的值的改变
        $("#" + domId).bind("input propertychange", function (event) {
            let inputVal = $(this).val();
            //没有值默认显示前5条
            if (isNull(inputVal) && showDefaultNum > 0) {
                //默认显示前5条
                $(searchData).each(function (i, v) {
                    if (i === 0) {
                        $("#" + domId).next().children("li").remove();
                    }
                    if (i < showDefaultNum) {
                        let appendHtml = "<li  value=\"" + v[defaultLiName] + "\" >" + v[defaultLiName] + "</li>";
                        $("#" + domId).next().append(appendHtml)
                    }
                });
                return
            }
            let searchArr = searchInputSelectData(searchData, searchAttr, inputVal, isLike);
            //清除下拉框的数据
            $(this).next().children("li").remove();
            if (searchArr.length) {
                for (let i = 0; i < searchArr.length; i++) {
                    let v = searchArr[i];
                    let appendHtml = "<li  value=\"" + v[defaultLiName] + "\" >" + v[defaultLiName] + "</li>";
                    $(this).next().append(appendHtml)
                }
    
            } else {
                $(this).next().append("<li value=\"\" >" + noRewordTips + "</li>")
            }
        });
    }
    
    
    /**
     * @function 根据指定搜索的值和指定搜索的字段从数组searchData中查询数据
     *@param searchData 搜索的数据源
     * @param searchAttr 搜索的字段,多个字段以逗号分开
     * @param searchVal 搜索的值
     * @param isLike   是否模糊查询;true-模糊匹配,false-完全匹配;默认false
     * @returns Array{Array|*} 返回搜索结果,数组类型
     */
    function searchInputSelectData(searchData,searchAttr,searchVal,isLike) {
        //return
        var returnArr = [];
    
        //check
        if (searchVal === "" || searchAttr === "" ||searchData===""||searchData.length<=0) {
            return returnArr;
        }
        //转换搜索的字段为数组类型
        let searchAttrArr = searchAttr.split(",");
        //默认完全匹配
        if (isLike === "") {
            isLike=false
        }
        let likePattern = new RegExp(searchVal);
        for (let i = 0; i < searchData.length; i++) {
            if (isLike) {
                //模糊查询
                for (let k=0;k<searchAttrArr.length;k++){
                    if (likePattern.test(searchData[i][searchAttrArr[k]])) {
                        returnArr.push(searchData[i]);
                    }
                }
            } else {
                //完全匹配
                for (let k=0;k<searchAttrArr.length;k++){
                    if (searchVal === searchData[i][searchAttrArr[k]]) {
                        returnArr.push(searchData[i]);
                    }
                }
            }
        }
    
        return returnArr;
    }
    
    
    /**
     *@function 演示
     * */
    //定义查询的元数据
    var searchData=[{
        "name": "aliyun",
        "host": "smtp.aliyun.com",
        "port": 25,
        "ssl": 465
    },
        {
            "name": "gmail",
            "host": "smtp.gmail.com",
            "port": 587,
            "ssl": 465
        },
        {
            "name": "exmail",
            "host": "smtp.exmail.qq.com",
            "port": 587,
            "ssl": 465
        },
        {
            "name": "qq",
            "host": "smtp.qq.com",
            "port": 25,
            "ssl": 465
        },
        {
            "name": "qq",
            "host": "smtp.163.com",
            "port": 25,
            "ssl": 465
        }
    ];
        //页面加载完成时 添加input的焦点获取事件
        $("#input-select").bind("input propertychange", function (event) {
            //获取输入框输入的值
            let inputVal = $(this).val();
    
            //没有值默认显示前5条
            if (isNull(inputVal)) {
                //默认显示前5条
                $(mailDefaultData).each(function (i, v) {
                    if (i === 0) {
                        $("#input-select").next().children("li").remove();
                    }
                    if (i < 5) {
                        let appendHtml = "<li  value=\"" + v.host + "\" >" + v.host + "</li>";
                        $("#input-select").next().append(appendHtml)
                    }
                });
                return
            }
            //调用方法搜索数据
            let searchArr = searchInputSelectData(searchData,"host",inputVal, true);
    
            //清除下拉框的原有数据
            $(this).next().children("li").remove();
            if (searchArr.length) {
                for (let i = 0; i < searchArr.length; i++) {
                    let v = searchArr[i];
                    let appendHtml = "<li  value=\"" + v.host + "\" >" + v.host + "</li>";
                    $(this).next().append(appendHtml)
                }
    
            } else {
                $(this).next().append("<li value=\"\" >没有检索到任何记录</li>")
            }
        });
    
    
    

    相关文章

      网友评论

          本文标题:自定义下拉框联动查询

          本文链接:https://www.haomeiwen.com/subject/bbponktx.html