页面版文本框智能提示JSCode

  首先说下背景,该code用于一个多条件查询界面,原本该查询条件由一个下拉列表提供,但是由于下拉列表数据量过大,用户使用不方便,便希望在页面给出一个智能提示的功能,但搜索的数据来自下拉列表,于是这code便诞生了,如下:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
    <script type="text/javascript" language="javascript">
        var currentIndex=-1;//保存提示框中选择的索引
        var sumSearchCount=0;//保存提示框中数据数量
        var tempValue="";//保存当前输入的要搜索的内容
        var objTxt="";//保存文本框对象
        var top=0;//提示框的top
        var left=0;//提示框的left
        var width=0;//提示框的width
        var values = new Array();//保存下拉列表的值
        var texts = new Array();//保存下拉列表的显示内容
        var tempDiv=new Array();//保存提示框中索引对应的values索引
       
        //获取下拉列表的值和显示内容
        function getSelectValues(ddl){
            ddlvalue = document.getElementById("DropDownList1");
            for(var i=0;i<ddlvalue.length;i++){
                values[i]=ddlvalue.options[i].value;
                texts[i]=ddlvalue.options[i].text;
            }
        }
       
        var oInterval = "";//保存自动计时对象
        function fnStartInterval(txt_id){
            getSelectValues("DropDownList1");
            objTxt=txt_id;//获取输入文本框对象
            top = getLength("offsetTop")+objTxt.offsetHeight;
            left= getLength("offsetLeft");
            width=objTxt.offsetWidth;
            oInterval = window.setInterval("beginSearch()",2000);//启用计时
        }
       
        //获取对应属性的长度
        function getLength(attribute)
        {
            var offset = 0;
            var txt_input = document.getElementById("txtSearch");
            while (item)
            {
                offset += txt_input[attribute];
                txt_input = txt_input.offsetParent;
            }
            return offset;
        }
       
        //停止计时
        function fnStopInterval()
        {
            window.clearInterval(oInterval);
        }
       
        //自动完成提示
        function beginSearch(){
            if(objTxt.value.length>0 && tempValue!=objTxt.value)
            {
                sumSearchCount=0;
                tempValue=objTxt.value;
                var div_show = document.getElementById("divMsg");
                div_show.style.top=top+"px";
                div_show.style.display="block";
                div_show.style.left=left+"px";
                div_show.style.width=width+"px";
                div_show.innerHTML="";
                var leng = texts.length;
                var txt_value = objTxt.value;
                var row="";
                for(var i=0;i<leng;i++){
                    if(texts[i].indexOf(txt_value)!=-1){                       
                        row = row + "<div style=/"font-size:14px; display:block;  width:100%/" id='divsearch_"+i+"' οnmοuseοver=/"this.style.backgroundColor='#3366CC';currentIndex="+i+";/" οnmοuseοut=/"this.style.backgroundColor='';currentIndex=-1;/" οnclick=/"span_click(this)/" >"+texts[i]+"</div>";                                          
                        tempDiv[sumSearchCount]=i;
                        sumSearchCount++;
                    }                   
                }
                div_show.innerHTML=row;
            }
            else if(objTxt.value.length==0 || objTxt.value == null)
            {
                var div_msg = document.getElementById("divMsg");
                div_msg.style.display="none";
                div_msg.innerHTML="";
            }
        }
       
        //提示内容单击保存到文本框中
        function span_click(sp)
        {           
            clear();
            objTxt.value=sp.innerHTML;
            document.getElementById("DropDownList1").options[sp.id.substring(sp.id.indexOf('_')+1,sp.id.length)].selected="selected";           
        }
       
        //停止查询,关闭提示
        function closeSearch()
        {
            var tbl = document.activeElement.parentElement;
            if(tbl && tbl.id!="divMsg")//防止使用上下键后丢失提示内容
            {
                clear();
                document.getElementById("divMsg").innerHTML="";
            }
            else if(currentIndex==-1)
            {
                clear();
                document.getElementById("divMsg").innerHTML="";
            }
        }
       
        //清空提示
        function clear()
        {
            fnStopInterval();
            currentIndex=-1;
            tempValue="";
            document.getElementById("divMsg").style.display="none";
        }
       
        //使用键盘上下方向键和enter键
        function changeSelect()
        {
            var divContent = document.getElementById("divMsg");
            if(divContent && divContent.style.display=="block")
            {
                if (event.keyCode == 38 || event.keyCode == 40 || event.keyCode == 13)
                {
                   
                    if(currentIndex!=-1) document.getElementById("divsearch_"+tempDiv[currentIndex]).style.backgroundColor="";
                    if (event.keyCode == 38 && currentIndex > 0)
                    {
                         currentIndex--;
                         document.getElementById("divsearch_"+tempDiv[currentIndex]).style.backgroundColor="#3366CC";
                    }
                    else if (event.keyCode == 40 && currentIndex < sumSearchCount-1)
                    {
                         currentIndex++;
                         document.getElementById("divsearch_"+tempDiv[currentIndex]).style.backgroundColor="#3366CC";
                    }
                    else if (event.keyCode == 13)
                    {                       
                        if(currentIndex > -1)
                        {                    
                            var divpart = document.getElementById("divsearch_"+tempDiv[currentIndex]);   
                            objTxt.value=divpart.innerHTML;                      
                            document.getElementById("DropDownList1").options[tempDiv[currentIndex]].selected="selected";
                            clear();
                        }
                    }
                }
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input type="text" id="txtSearch" autocomplete="off" οnkeydοwn="changeSelect()" οnfοcus="fnStartInterval(this)" οnblur="closeSearch()" runat="server" />
        <asp:DropDownList ID="DropDownList1" runat="server" DataTextField="slr_realname" DataValueField="systemloginrecord_id" DataSourceID="ObjectDataSource1" Width="130px">
        </asp:DropDownList><asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetRecordDS"
            TypeName="TestDAL"></asp:ObjectDataSource>
    </div>
    <div style="display:none; z-index:2; text-align:left; position:absolute; border:solid 1px;" id="divMsg">
       
    </div>
    </form>
</body>

</html>

 <input type="text" id="txtSearch" autocomplete="off"。。。这里加入了autocomplete属性,屏蔽了文本框输入记录提示功能,虽然这个功能很好,但是在这里却成了绊脚石。呵呵

以前没有写博客的习惯,好多不经常使用的东西用过就忘了。以后是要整理整理了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值