利用js实现输入框动态提示信息

为了提高和用户的交互性,现在的输入框往往都采用输入信息自动提示的功能,类似于百度输入框中的提示功能。

设计思路是:在输入框input的组件下面放置一个div,这个div主要是为了提示信息的展示功能,类似于下拉框那种形式。

步骤一:在网页加载的时候会首先把输入框中要查询的信息全部加载出来,并且放置在一个全局变量中。

步骤二:当用户在输入框中输入信息的时候会触发响应函数,函数的主要功能是获取用户的输入值并继续监控用户后续的输入值,然后把输入值进行处理,于缓存中的全局变量进行对比操作,把缓存中相同的部分返回给上面提到过的div,div中就显示了和用户输入条件相类似的信息,提供用户选择。

步骤三:用户在菜单中选择自己想要的信息,通过js代码实现将选择的信息返回到输入框中去。

大体的设计思路就是这样,现在看看具体的例子:

1.菜单显示的样式信息:

.auto_hidden {
    width:204px;
    border-top: 1px solid #333;
    border-bottom: 1px solid #333;
    border-left: 1px solid #333;
    border-right: 1px solid #333;
    position:absolute;
    display:none;
}
.auto_show {
    width:204px;
    border-top: 1px solid #333;
    border-bottom: 1px solid #333;
    border-left: 1px solid #333;
    border-right: 1px solid #333;
    position:absolute;
    z-index:9999; /* 保证页面在最前端*/
    display:block;
    height:100px;
    overflow:auto
}
.auto_onmouseover{
    color:#ffffff;
    background-color:highlight;
    width:100%;
}
.auto_onmouseout{
    color:#000000;
    width:100%;
    background-color:#ffffff;
}
2.js部分的处理代码:

var Bind = function(object, fun) {
    return function() {
        return fun.apply(object, arguments);
    }
}
function AutoComplete(obj,autoObj,arr){
    this.obj=document.getElementById(obj);        //输入框
    this.autoObj=document.getElementById(autoObj);//DIV的根节点
    this.value_arr=arr;        //不要包含重复值
    this.index=-1;          //当前选中的DIV的索引
    this.search_value="";   //保存当前搜索的字符    
}
AutoComplete.prototype={
    //初始化DIV的位置
    init: function(){
        this.autoObj.style.left = this.obj.offsetLeft + "px";
        this.autoObj.style.top  = this.obj.offsetTop + this.obj.offsetHeight + "px";
        this.autoObj.style.width= this.obj.offsetWidth - 2 + "px";//减去边框的长度2px   
    },
    //删除自动完成需要的所有DIV
    deleteDIV: function(){
        while(this.autoObj.hasChildNodes()){
            this.autoObj.removeChild(this.autoObj.firstChild);
        }
        this.autoObj.className="auto_hidden";
    },
    //设置值
    setValue: function(_this){
        return function(){
            _this.obj.value=this.seq;
            _this.autoObj.className="auto_hidden";
        }       
    },
    //模拟鼠标移动至DIV时,DIV高亮
    autoOnmouseover: function(_this,_div_index){
        return function(){
            _this.index=_div_index;
            var length = _this.autoObj.children.length;
            for(var j=0;j<length;j++){
                if(j!=_this.index ){       
                    _this.autoObj.childNodes[j].className='auto_onmouseout';
                }else{
                    _this.autoObj.childNodes[j].className='auto_onmouseover';
                    _this.obj.value=this.seq;
                }
            }            
        }
    },
    //更改classname
    changeClassname: function(length){
        for(var i=0;i<length;i++){
            if(i!=this.index ){       
                this.autoObj.childNodes[i].className='auto_onmouseout';
            }else{
                this.autoObj.childNodes[i].className='auto_onmouseover';
                this.obj.value=this.autoObj.childNodes[i].seq;
            }
        }
    }
    ,
    //响应键盘
    pressKey: function(event){
        var length = this.autoObj.children.length;
        //光标键"↓"
        if(event.keyCode==40){
            ++this.index;
            if(this.index>length){
                this.index=0;
            }else if(this.index==length){
                this.obj.value=this.search_value;
            }
            this.changeClassname(length);
        }
        //光标键"↑"
        else if(event.keyCode==38){
            this.index--;
            if(this.index<-1){
                this.index=length - 1;
            }else if(this.index==-1){
                this.obj.value=this.search_value;
            }
            this.changeClassname(length);
        }
        //回车键
        else if(event.keyCode==13){
            this.autoObj.className="auto_hidden";
            this.index=-1;
        }else{
            this.index=-1;
        }
    },
    //程序入口
    start: function(event){
        if(event.keyCode!=13&&event.keyCode!=38&&event.keyCode!=40){
            this.init();
            this.deleteDIV();
            this.search_value=this.obj.value;
            var valueArr=this.value_arr;
            valueArr.sort();
            if(this.obj.value.replace(/(^\s*)|(\s*$)/g,'')==""){ return; }//值为空,退出
            try{ var reg = new RegExp("(" + this.obj.value + ")","i");}
            catch (e){ return; }
            var div_index=0;//记录创建的DIV的索引
            for(var i=0;i<valueArr.length;i++){
                if(reg.test(valueArr[i])){
                    var div = document.createElement("div");
                    div.className="auto_onmouseout";
                    div.seq=valueArr[i];
                    div.οnclick=this.setValue(this);
                    div.οnmοuseοver=this.autoOnmouseover(this,div_index);
                    div.innerHTML=valueArr[i].replace(reg,"<strong>$1</strong>");//搜索到的字符粗体显示
                    this.autoObj.appendChild(div);
                    this.autoObj.className="auto_show";
                    div_index++;
                }
            }
        }
        this.pressKey(event);
        window.οnresize=Bind(this,function(){this.init();});
    }
}

HTML中的实现代码:

<html>
<head>
<meta charset="UTF-8">
<title>js中字符串处理</title>
</head>
<link href="css/AutoComplete.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="js/AutoComplete.js"></script>
<script type="text/javascript">
	$(document).ready(function(){
		//$('#p_apiName').val(api);
		createApi();
	});

	var autoComplete;
	function createApi(){
		var inputValue=["aa.bb.ccc","as.sd.we","123.425","aa.bb.ccc.ee","as.sd.we.ee","123.425.ee","aa.bb.ccc.ee.ee","as.sd.we.ee.ee.e","123.425.e"];
		if(!autoComplete){
			autoComplete = new AutoComplete('p_apiName','auto',inputValue);//第一个参数是输入框id,第二个是下拉显示的id,第三个是获取的全部数据。
		}
		$('#p_apiName').blur(function () {//点击下拉选项得到获取值
			//alert($('#p_apiName').val());点击获取选择的值。
	    });
	}
</script>
<body>
	<h1>输入框动态提示信息</h1>
	<div>
		<label class="flabel">输入值:</label>
		<input id="p_apiName" name="apiName" type="text" autocomplete="off" 
		style="width:395px;height:30px;font-size:15pt;" οnkeyup="autoComplete.start(event)">
	</div>
    <div class="auto_hidden" style="height: auto; background-color: #F0F0F0;font-size: 15pt;" id="auto">
	</div>
</body>
</html>
运行截图:

到这里例子就介绍完毕了,这里需要主要的是:这个项目还引用了JQuery的js文件,大家可以去网络上下载。


  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值