autocomplete 插件用法和用js实现autocomplete

来源:互联网 发布:教育行业网络推广方案 编辑:程序博客网 时间:2024/06/06 07:01

1.插件

http://www.runoob.com/jqueryui/example-autocomplete.html


2. jquery实现autocomplete

http://www.jb51.net/article/28075.htm

http://www.jb51.net/article/28075.htm


/*-----------------------------------------test.jsp--------------------------------------------------------------------------------------------*/

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="utf-8"%>
    
<%
request.setAttribute("path", request.getContextPath());
String path = request.getContextPath();
%>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>搜索词自动完成</title>
    <style type="text/css">
        #search{
            text-align: center;
            position:relative;
        }
        .autocomplete{
            border: 1px solid #9ACCFB;
            background-color: white;
            text-align: left;
        }
        .autocomplete li{
            list-style-type: none;
        }
        .clickable {
            cursor: default;
        }
        .highlight {
            background-color: #9ACCFB;
        }
    </style>
    <script type="text/javascript" src="${path}/javascripts/jquery-1.10.1.min.js"></script>
    <script type="text/javascript">
        $(function(){
//取得div层
            var $search = $('#search');
//取得输入框JQuery对象
            var $searchInput = $search.find('#search-text');
//关闭浏览器提供给输入框的自动完成
            $searchInput.attr('autocomplete','off');
//创建自动完成的下拉列表,用于显示服务器返回的数据,插入在搜索按钮的后面,等显示的时候再调整位置
            var $autocomplete = $('<div class="autocomplete"></div>')
                    .hide()
                    .insertAfter('#submit');
//清空下拉列表的内容并且隐藏下拉列表区
            var clear = function(){
                $autocomplete.empty().hide();
            };
//注册事件,当输入框失去焦点的时候清空下拉列表并隐藏
            $searchInput.blur(function(){
                setTimeout(clear,500);
            });
//下拉列表中高亮的项目的索引,当显示下拉列表项的时候,移动鼠标或者键盘的上下键就会移动高亮的项目,想百度搜索那样
            var selectedItem = null;
//timeout的ID
            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':'testindex.jsp', //服务器的地址
                    'data':{'search-text':$searchInput.val()}, //参数
                    'dataType':'json', //返回数据类型
                    'type':'POST', //请求类型
                    'success':function(data){
                    console.log("data.length:"+data.length);
                        if(data.length) {
//遍历data,添加到自动完成区
                            $.each(data, 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');
//当鼠标离开时索引置-1,当作标记
                                            selectedItem = -1;
                                        })
                                        .click(function(){
//鼠标单击下拉列表的这一项的话,就将这一项的值添加到输入框中
                                            $searchInput.val(term);
//清空并隐藏下拉列表
                                            $autocomplete.empty().hide();
                                        });
                            });//事件注册完毕
//设置下拉列表的位置,然后显示下拉列表
                            var ypos = $searchInput.position().top;
                            var xpos = $searchInput.position().left;
                            $autocomplete.css('width',$searchInput.css('width'));
                            $autocomplete.css({'position':'relative','left':xpos + "px",'top':ypos +"px"});
                            setSelectedItem(0);
//显示下拉列表
                            $autocomplete.show();
                        }
                    }
                });
            };
//对输入框进行事件注册
            $searchInput.keyup(function(event) {
//字母数字,退格,空格
                        if(event.keyCode > 40 || event.keyCode == 8 || event.keyCode ==32) {
//首先删除下拉列表中的信息
                            $autocomplete.empty().hide();
                            clearTimeout(timeoutid);
                            timeoutid = setTimeout(ajax_request,100);
                        }
                        else if(event.keyCode == 38){
//上
//selectedItem = -1 代表鼠标离开
                            if(selectedItem == -1){
                                setSelectedItem($autocomplete.find('li').length-1);
                            }
                            else {
//索引减1
                                setSelectedItem(selectedItem - 1);
                            }
                            event.preventDefault();
                        }
                        else if(event.keyCode == 40) {
//下
//selectedItem = -1 代表鼠标离开
                            if(selectedItem == -1){
                                setSelectedItem(0);
                            }
                            else {
//索引加1
                                setSelectedItem(selectedItem + 1);
                            }
                            event.preventDefault();
                        }
                    })
                    .keypress(function(event){
//enter键
                        if(event.keyCode == 13) {
//列表为空或者鼠标离开导致当前没有索引值
                            if($autocomplete.find('li').length == 0 || selectedItem == -1) {
                                return;
                            }
                            $searchInput.val($autocomplete.find('li').eq(selectedItem).text());
                            $autocomplete.empty().hide();
                            event.preventDefault();
                        }
                    })
                    .keydown(function(event){
//esc键
                        if(event.keyCode == 27 ) {
                            $autocomplete.empty().hide();
                            event.preventDefault();
                        }
                    });
//注册窗口大小改变的事件,重新调整下拉列表的位置
            $(window).resize(function() {
                var ypos = $searchInput.position().top;
                var xpos = $searchInput.position().left;
                $autocomplete.css('width',$searchInput.css('width'));
                $autocomplete.css({'position':'relative','left':xpos + "px",'top':ypos +"px"});
            });
        });
    </script>
</head>
<body>
<div id = "search">
    <label for="search-text">keyWord</label><input type="text" id="search-text" name="search-text" />
    <input type="button" id="submit" value="Search"/>
</div>
</body>
</html>

/*---------------------------testindex.jsp-------------------------------------------*/

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%
String[] words = { "amani", "ab c", "apple", "abstract", "an",
"bike", "byebye", "beat", "be", "bing", "come", "cup",
"class", "calendar", "china" };
if (request.getParameter("search-text") != null) {
String key = request.getParameter("search-text");
if (key.length() != 0) {
String json = "[";
for (int i = 0; i < words.length; i++) {
if (words[i].startsWith(key)) {
json += "\"" + words[i] + "\"" + ",";
}
}
json = json.substring(0,
json.length() - 1 > 0 ? json.length() - 1 : 1);
json += "]";
System.out.println("json:" + json);
out.println(json);
}
}
%>


/*-------------------------------------end 2--------------------------------------------*/



/*-------------------------------------------------------------------------------------*/

3.jQuery插件datalist实现很好看的input下拉列表
http://www.jb51.net/article/69412.htm


4.jquery 实现类似效果

http://www.zhangxinxu.com/wordpress/2013/03/html5-datalist-%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8-%E5%8F%AF%E8%A1%8C%E6%80%A7/


5.插件集

http://www.jq22.com/search?seo=%E8%87%AA%E5%8A%A8%E8%A1%A5%E5%85%A8



0 0
原创粉丝点击