Ajax&JavaScript&css模仿百度一下模糊查询功能

1、效果

如下图所示,我们在输入大学时,程序会到后端查询名字中包含大学的数据,并展示到前端页面。

用户选择一个大学,该大学值会被赋值到input表单,同时关闭下拉表单;

当页面展示的数据都不符合条件时,用户点击空白处,可关闭表单。

2、前端

2.1、页面html代码

<label class="layui-form-label required" th:text="#{register.unit}">单位名称:</label>
<div class="layui-input-block">
    <input type="text" id="UNIT" name="" th:placeholder="#{register.enterUnit}" autocomplete="off" class="layui-input">
</div>
<div id="show" class="layui-form-item" style="display: none"></div>

2.2、页面js代码

<script>
    $(function () {
    	//用于监听键盘事件
        $("#UNIT").bind('input porpertychange', function () {
            var word = $(this).val();
            if (word != "") {
                $.ajax({
                    url: "./keyword",
                    data: {"name": word},
                    type: "post",
                    dataType: "json",
                    success: function (obj) {
                        console.log(obj);
                        var htmlStr = "";
                        for (var i = 0; i < obj.length; i++) {
                            htmlStr += "<li style='list-style: none' onclick='demo(this)'>" + obj[i] + "</li>";
                        }
                        $("#show").html(htmlStr).show();
                    }
                })
            } else {
                $("#show").hide();
            }
        })
    })
    //监听用户点击li的事件,用户选择一个小li,小li的值被赋值给input,同时关闭小li
    function demo(dom) {
        $("#UNIT").val(dom.innerText);
        $("#show").hide();
    }
    //监听鼠标点击事件,当后端返回没有符合条件的数据时,用户点击空白页面时,关闭show
    $(document).click(function(){
        $("#show").hide();
    });
</script>

2.3、页面css样式代码

<style type="text/css">
        * {
            margin: 0px;
            padding: 0px;
        }
        #UNIT {
            width: 100%;
            height: 42px;
            border-color: #4E6EF2;
            float: left;
        }
        #show {
            border: 1px solid #4e6ef2;
            position: relative;
            left: 20%;
            margin-right: 45%;
            text-align: left;
        }
        li:hover{
            background-color: rgba(0,120,212, 0.1);
        }
    </style>

3、后端

@RequestMapping("/keyword")
@ResponseBody
protected List unitData(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    List<String> list=new ArrayList<>();
    List<String> universities = Arrays.asList("公安局,教育局,北京大学,清华大学,上海交通大学,浙江大学,厦门大学,河南大学,河北大学, 浙江大学,福建大学,广东大学,广西大学,四川大学,山东大学,陕西大学,山西大学,a1,a2,a3,aa,".split(","));
    for (String s : universities) {
        if(s.contains(req.getParameter("name"))){
            list.add(s);
        }
    }
    return list;
}
相关推荐
F-2H12 分钟前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++
gqkmiss1 小时前
Chrome 浏览器插件获取网页 iframe 中的 window 对象
前端·chrome·iframe·postmessage·chrome 插件
m0_748247553 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
m0_748255023 小时前
前端常用算法集合
前端·算法
真的很上进4 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203984 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2344 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
如若1235 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~6 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语6 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js