jquery的输入框自动补全功能+ajax

jquery的输入框自动补全功能+ajax

2017年05月10日 18:51:39 辣姐什么鬼 阅读数:1461 标签: web前端 更多

个人分类: web前端

内容参考网友文章写成,原博的链接找不到了,但是感谢分享!

效果图:

涉及到ajax请求我这里本地请求不到数据就先放测试代码,在文章的最后会放上ajax代码:

用来测试的代码:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>jquery自动补全+ajax</title>
    <style>
        body{font-size:12px;}
        *{margin:0;padding:0;}
        #searchBox{position:relative;margin:100px auto;width:200px;}
        /*补全框*/
        .autocomplete{background:#fff;border:1px solid #efefef;list-style-type:none;}
        .autocomplete li{height:20px;line-height:20px;border-bottom:1px solid #efefef;cursor:default;}
        .highlight {background-color: #9ACCFB;}
        #registerCity{outline:none;width:100%;}
    </style>
</head>
<body>
<div id="searchBox">
    <input type="text" id="registerCity" autocomplete="off" value=""/>
</div>
<script src="assets/js/jquery-2.0.3.min.js"></script>
<script>
    //-------注册地自动补全开始----------------------------------
    var registerCity=$("#registerCity");
    //创建自动完成的下拉列表,用于显示服务器返回的数据,插入在输入框后面,然后调整位置
    var autocomplete=$(‘<ul class="autocomplete"></ul>‘).hide().appendTo("#searchBox");
    //清空下拉列表的内容并且隐藏下拉列表
    var clear= function () {
        autocomplete.empty().hide();
    };
    //注册事件,当输入框失去焦点的时候清空下拉列表并隐藏
    registerCity.blur(function () {
        setTimeout(clear,500);
    });
    //下拉列表中高亮的项目的索引,当显示下拉列表项的时候,移动鼠标或者键盘的下键就会移动高亮的项目
    var selectedItem=null;
    var timeoutId=null;
    //设置下拉项的高亮背景
    var setSelectedItem= function (item) {
        selectedItem=item;
        //按上下键是循环显示的,小于0就设置成最大值,大于最大值就设置成0
        if(selectedItem<0){
            selectedItem=autocomplete.find("li").length-1;
        }else if(selectedItem>autocomplete.find("li").length-1){
            selectedItem=0;
        }
        //首先移除其他列表项的高亮背景,然后再高亮当前索引的背景
        autocomplete.find("li").removeClass("highlight")
.eq(selectedItem).addClass("highlight");
    };
    var ajax_request= function () {
//        ajax服务端通信
//        $.ajax({
//            url:"/car/info/seach/city/first",
//            contentType:"application/x-www-form-urlencoded:charset=UTF-8",
//            type:"get",
//            dataType:"json",
//            data:{"reg_city":$("#registerCity").val()},
//            success: function (data) {
//                var cityArr=data.city;
                var cityArr=["大壳宝","大壳美","大壳棒棒哒","厉害了我的壳"];
        //如果有数据
                if(cityArr.length>0){
                    $.each(cityArr, function (index, term) {
                        //创建li标签,添加到下拉列表中
                        $(‘<li></li>‘).text(term).appendTo(autocomplete)
.addClass("clickable")
.hover(function () {
                                    $(this).siblings().removeClass("highlight");
                                    $(this).addClass("highlight");
                                    selectedItem=index;
                                }, function () {
                                    $(this).removeClass("highlight");
                                    selectedItem=-1;
                                }).click(function () {
                                    //鼠标单击下拉列表的这一项的话,就将这一项的值添加到输入框中
                                    registerCity.val(term);
                                    //清空并隐藏下拉列表
                                    autocomplete.empty().hide();
                                });
                    });//事件注册完毕
                    //设置下拉列表的位置,然后显示下拉列表
                    var ypos=registerCity.height()+4;
                    var xpos=registerCity.position().left;
                    autocomplete.css(‘width‘,registerCity.css(‘width‘));
                    autocomplete.css({‘position‘:‘absolute‘,‘left‘:xpos+‘px‘,‘top‘:ypos+‘px‘,"z-index":"100"});
                    setSelectedItem(0);
                    //显示下拉列表
                    autocomplete.show();
                }
//            }
//        });
    };
    //对输入框进行事件注册
    registerCity.keyup(function (e) {
        //字母数字、退格、空格
        if(e.keyCode > 40 || e.keyCode == 8 || e.keyCode ==32){
            //首先删除下拉列表中的信息
            autocomplete.empty().hide();
            clearTimeout(timeoutId);
            timeoutId=setTimeout(ajax_request,100);
        }else if(e.keyCode==38){
            //上
            //selectedItem=-1代表鼠标离开
            if(selectedItem==-1){
                setSelectedItem(autocomplete.find("li").length-1);
            }else{
                //索引减1
                setSelectedItem(selectedItem-1);
            }
            e.preventDefault();
        }else if(e.keyCode==40){
            //下
            if(selectedItem==-1){
                setSelectedItem(0);
            }else{
                setSelectedItem(selectedItem+1);
            }
            e.preventDefault();
        }
    }).keypress(function (e) {
        //enter回车键
        if(e.keyCode==13){
            //列表为空或者鼠标离开导致当前没有索引值
            if(autocomplete.find("li").length==0||selectedItem==-1){
                return;
            }
            registerCity.val(autocomplete.find("li").eq(selectedItem).text());
            autocomplete.empty().hide();
            e.preventDefault();
        }
    }).keydown(function (e) {
        //esc后退
        if(e.keyCode==27){
            autocomplete.empty().hide();
            e.preventDefault();
        }
    });
    //------注册地自动补全结束----------------------------
</script>
</body>
</html>

正式的用ajax实现的代码:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>jquery自动补全+ajax</title>
    <style>
        body{font-size:12px;}
        *{margin:0;padding:0;}
        #searchBox{position:relative;margin:100px auto;width:200px;}
        /*补全框*/
        .autocomplete{background:#fff;border:1px solid #efefef;list-style-type:none;}
        .autocomplete li{height:20px;line-height:20px;border-bottom:1px solid #efefef;cursor:default;}
        .highlight {background-color: #9ACCFB;}
        #registerCity{outline:none;width:100%;}
    </style>
</head>
<body>
<div id="searchBox">
    <input type="text" id="registerCity" autocomplete="off" value=""/>
</div>
<script src="assets/js/jquery-2.0.3.min.js"></script>
<script>
    //-------注册地自动补全开始----------------------------------
    var registerCity=$("#registerCity");
    //创建自动完成的下拉列表,用于显示服务器返回的数据,插入在输入框后面,然后调整位置
    var autocomplete=$(‘<ul class="autocomplete"></ul>‘).hide().appendTo("#searchBox");
    //清空下拉列表的内容并且隐藏下拉列表
    var clear= function () {
        autocomplete.empty().hide();
    };
    //注册事件,当输入框失去焦点的时候清空下拉列表并隐藏
    registerCity.blur(function () {
        setTimeout(clear,500);
    });
    //下拉列表中高亮的项目的索引,当显示下拉列表项的时候,移动鼠标或者键盘的下键就会移动高亮的项目
    var selectedItem=null;
    var timeoutId=null;
    //设置下拉项的高亮背景
    var setSelectedItem= function (item) {
        selectedItem=item;
        //按上下键是循环显示的,小于0就设置成最大值,大于最大值就设置成0
        if(selectedItem<0){
            selectedItem=autocomplete.find("li").length-1;
        }else if(selectedItem>autocomplete.find("li").length-1){
            selectedItem=0;
        }
        //首先移除其他列表项的高亮背景,然后再高亮当前索引的背景
        autocomplete.find("li").removeClass("highlight")
.eq(selectedItem).addClass("highlight");
    };
    var ajax_request= function () {
//        ajax服务端通信
        $.ajax({
            url:"/car/info/seach/city/first",
            contentType:"application/x-www-form-urlencoded:charset=UTF-8",
            type:"get",
            dataType:"json",
            data:{"reg_city":$("#registerCity").val()},
            success: function (data) {
                var cityArr=data.city;
//                var cityArr=["大壳宝","大壳美","大壳棒棒哒","厉害了我的壳"];
        //如果有数据
                if(cityArr.length>0){
                    $.each(cityArr, function (index, term) {
                        //创建li标签,添加到下拉列表中
                        $(‘<li></li>‘).text(term).appendTo(autocomplete)
.addClass("clickable")
.hover(function () {
                                    $(this).siblings().removeClass("highlight");
                                    $(this).addClass("highlight");
                                    selectedItem=index;
                                }, function () {
                                    $(this).removeClass("highlight");
                                    selectedItem=-1;
                                }).click(function () {
                                    //鼠标单击下拉列表的这一项的话,就将这一项的值添加到输入框中
                                    registerCity.val(term);
                                    //清空并隐藏下拉列表
                                    autocomplete.empty().hide();
                                });
                    });//事件注册完毕
                    //设置下拉列表的位置,然后显示下拉列表
                    var ypos=registerCity.height()+4;
                    var xpos=registerCity.position().left;
                    autocomplete.css(‘width‘,registerCity.css(‘width‘));
                    autocomplete.css({‘position‘:‘absolute‘,‘left‘:xpos+‘px‘,‘top‘:ypos+‘px‘,"z-index":"100"});
                    setSelectedItem(0);
                    //显示下拉列表
                    autocomplete.show();
                }
            }
        });
    };
    //对输入框进行事件注册
    registerCity.keyup(function (e) {
        //字母数字、退格、空格
        if(e.keyCode > 40 || e.keyCode == 8 || e.keyCode ==32){
            //首先删除下拉列表中的信息
            autocomplete.empty().hide();
            clearTimeout(timeoutId);
            timeoutId=setTimeout(ajax_request,100);
        }else if(e.keyCode==38){
            //上
            //selectedItem=-1代表鼠标离开
            if(selectedItem==-1){
                setSelectedItem(autocomplete.find("li").length-1);
            }else{
                //索引减1
                setSelectedItem(selectedItem-1);
            }
            e.preventDefault();
        }else if(e.keyCode==40){
            //下
            if(selectedItem==-1){
                setSelectedItem(0);
            }else{
                setSelectedItem(selectedItem+1);
            }
            e.preventDefault();
        }
    }).keypress(function (e) {
        //enter回车键
        if(e.keyCode==13){
            //列表为空或者鼠标离开导致当前没有索引值
            if(autocomplete.find("li").length==0||selectedItem==-1){
                return;
            }
            registerCity.val(autocomplete.find("li").eq(selectedItem).text());
            autocomplete.empty().hide();
            e.preventDefault();
        }
    }).keydown(function (e) {
        //esc后退
        if(e.keyCode==27){
            autocomplete.empty().hide();
            e.preventDefault();
        }
    });
    //------注册地自动补全结束----------------------------
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/longly/p/9657076.html

时间: 2024-10-15 19:21:00

jquery的输入框自动补全功能+ajax的相关文章

solr进阶七:与jQuery结合的自动补全功能

网上有大量的jQuery自动补全功能的插件,我实现这个功能是采用网友写好的纯jQuery代码,而不是采用插件,因为特效会差很多.而后台的数据是从solr那边获取过来,通过整理,放到对象中,再放到集合中,然后在servlet层解开,生成xml文件,返回到前台,形成自动提示补全的功能,流程非常简单,没有采用框架技术,只是用了JSP的servlet来做中间层而已. 目录结构如下: 1.先编写实体类src\com\lifeix\entity\Word.java package com.lifeix.en

输入框自动补全功能

在输入框输入信息后,自动提示补全.我选择用typeahead.js,后来发现,原来这个库的相关学习资料很少,搞的稍微有点久,才弄明白点...本文实属原创,如有错误,敬请指教! 简介: 官网:http://twitter.github.io/typeahead.jsgithub: https://github.com/twitter/typeahead.js使用文档:https://www.awesomes.cn/repo/twitter/typeahead-js 在查资料的过程中,不难发现,ty

jQuery Autocomplete 自动补全功能

使用Autocomplete可以很简单的就有文本框的自动补全功能提示了. 在HTML文件中引入autocomplete的js文件和css样式文件,以及autocomplete压缩包中的jQuery的js文件,不要私自用高版本的jQuery,可能会导致显示不出效果. 先来从网友那里拷贝过来的最简单的例子: <span style="font-size:24px;"><!DOCTYPE html> <html> <head> <meta

c#TextBox输入框自动提示、自动完成、自动补全功能

功能概览 相关属性 TextBox.AutoCompleteCustomSource 属性 获取或设置当 TextBox.AutoCompleteSource 属性设置为 [CustomSource] 时要使用的自定义 T:System.Collections.Specialized.StringCollection. TextBox.AutoCompleteMode 属性 获取或设置一个选项,该选项控制自动完成应用于 TextBox 的方式. 属性值 类型:System.Windows.For

四十七 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html 1.创建搜索自动补全字段suggest 自动补全需要用到一个字段名称为suggest类型为Completion类型的一个字段 所以我们需要用将前面的elasticsearch-dsl操作elasticsearch(搜索引擎)增加sugg

js 实现类似百度联想输入,自动补全功能

js  实现类似百度联想输入,自动补全功能 方案一: search是搜索框id="search" 1 //点击页面隐藏自动补全提示框 2 document.onclick = function (e) { 3 var e = e ? e : window.event; 4 var tar = e.srcElement || e.target; 5 if (tar.id != search) { 6 if ($("#" + auto).is(":visibl

easyui-combobox 实现简单的自动补全功能

前台: Html页面 <input id="clsydw" name="clsydw" class="easyui-combobox" data-options="" /> JS //自动补全功能 $("#clsydw").combobox({ valueField:'syr', textField:'syr', panelWidth:200, panelHeight:'auto', onCha

Eclipse自动补全功能和自动生成作者、日期注释等功能设置

以前想实现添加代码作者信息的东西,但不知道怎样实现,今天终于在网上无意中找到解决办法了 Eclipse自动生成作者.日期注释等功能设置 在使用Eclipse 编写Java代码时,自动生成的注释信息都是按照预先设置好的格式生成的. 修改作者.日期注释格式:打开Windows->Preferences->Java->Code Style->Code Templates,点击右边窗口中的Comments,可以看到有很多选项,我们便可对此注释信息模板进行编辑. 如我们希望在一个Java文件

第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html 创建自动补全字段 自动补全需要用到一个字段名称为suggest类型为Completion类型的一个字段 所以我们需要用