当前位置 : 主页 > 网络编程 > JavaScript >

类似于搜索框的功能

来源:互联网 收集:自由互联 发布时间:2021-07-03
凑合凑合,还能用。 1. [代码] [JavaScript]代码 //键盘按下事件function getHospitalInfo(obj){ //获取下拉div var divs = obj.nextSibling.nextSibling; //获取列表集合 var div = $(divs).children(); if(event.keyCode == 3
凑合凑合,还能用。

1. [代码][JavaScript]代码    

//键盘按下事件
function getHospitalInfo(obj){
    //获取下拉div
    var divs = obj.nextSibling.nextSibling;
    //获取列表集合
    var div = $(divs).children();
    if(event.keyCode == 38){//上
        changeCheck(div,1);
    }else if(event.keyCode == 40){//下
        changeCheck(div,-1);
    }else if(event.keyCode == 13){//Enter
        changeCheck(div,0);
    }else if(event.keyCode > 40 || event.keyCode == 8 || event.keyCode == 32){//键盘按的是字母数字,退格,空格
        //清空div的内容
        $(divs).children().remove();
        //判断文本框是否有值
        if(obj.value){
            setValue(divs,obj);
        }else{
            $(divs).hide();
            $(obj).removeAttr("name");
        }
    }
}

//Obj代表的为当前的文本框,index代表的是当前按的是上 下 Enter
function changeCheck(obj,index){
    var divs = obj.toArray();
    var check = false;
    var postion = 0; 
    for(var i = 0; i < divs.length; i++){
        var div = divs[i];
        if($(div).attr("class").toString() == "div_div border"){//当前列表中已经有选中状态的块
            check = true;
            postion = i;
        }
    }
    if(check){ //代表当前列表有一个选中状态
        if(index == 1){//上
            $(divs[postion]).removeClass("border");
            if(postion == 0){ 
                $(divs[divs.length-1]).addClass("border");
            }else{
                $(divs[postion-1]).addClass("border");
            }
        }else if(index == -1){//下
            $(divs[postion]).removeClass("border");
            if(postion == divs.length-1){ 
                $(divs[0]).addClass("border");
            }else{
                $(divs[postion+1]).addClass("border");
            }
        }else{//enter
            $(divs[postion]).click();
        }
    }
}

//获得焦点
function onGetFous(obj){
    //获取下拉div集合
    var divs = obj.nextSibling.nextSibling;
    //清空div的内容
    $(divs).children().remove();
    //判断文本框是否有值
    if(obj.value){
        setValue(divs,obj);
    }else{
        $(divs).hide();
        $(obj).removeAttr("name");
    }
}

//点击任意位置
$(document).click(function (){
    $(".divs").children().remove();
    $(".divs").hide();
});

//通过得到的值,模糊查询,并把结果填充
function setValue(divs,obj){
    $.ajax({
        url:'selectUrl',
        type: "POST",
        data:{"data":obj.value},
        success:function(data){
            if(data == "{}"){
                //如果没有值,则隐藏下拉列表
                $(divs).hide();
            }else{
                //格式化数据转换为json格式
                var json = $.parseJSON(data);
                for(var key in json){
                    //判断用户是不是全部自己输入的
                    if(json[key] == obj.value){
                        for(var key in json){
                            $(obj).attr("name",key);
                            $(divs).children().remove();
                            $(divs).hide();
                        }
                    }else{
                        //创建一个div
                        var div = document.createElement("div");
                        $(div).attr("name",key);
                        div.innerText = json[key];
                        //添加样式
                        $(div).addClass("div_div");
                        //添加悬浮事件
                        $(div).hover(
                            function(){
                                $(divs).children().removeClass("border");
                                $(this).addClass("border");
                            },
                            function(){
                                $(this).removeClass("border");
                            }
                        ).click(function(){//添加单击事件
                            var text = this.innerText.substring(this.innerText.lastIndexOf(" ")+1);
                            $(obj).val(text);
                            $(obj).attr("name",$(this).attr("name"));
                            $(divs).children().remove(); 
                            $(divs).hide();
                        });
                        //把div追加到divs中
                        $(divs).append(div);
                    }//判断用户输入结束
                }
                //为第一个添加选中
                $($(divs).children().first()).addClass("border");
            }
            //显示divs
            divs.style.display = "block";
        }
    });
}

<html>
<head></head>
<body><input type="text" id="HAR_H1_NBR" class="div_l_40p" onkeyup="getHospitalInfo(this)" onfocus="onGetFous(this)"></body>
</html>
网友评论