`
yuca2008
  • 浏览: 2097 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

利用javascript实现仿google文本框的问题

阅读更多
我想仿效google文本框的功能,并在此基础上增加了嵌套选择框,实现效果如附图,但是为什么当我选择自定义输入文字后当光标离开文本框时不会出现附图3那样由原来的文本框变为选择框,代码如下:
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>文本框下拉提示</title><head>
<script language="javascript">
var
sel = "sel",
custom = "custom",
sDefault = "自定义";

var $ = {

// 显示自定义input
forInput : function() {
var oSel = document.getElementById(sel);
var oCus = document.getElementById(custom);

var iSel = oSel.options.selectedIndex;
var vSel = oSel[iSel].value;

if (vSel == sDefault) {
oSel.style.display = "none";
oCus.style.display = "";
oCus.focus();
}
},

// 显示带有自定义文本选项的select
forSel : function() {
var oSel = document.getElementById(sel);
var oCus = document.getElementById(custom);

oSel.style.display = "";
oCus.style.display = "none";

if (oCus.value.length == 0) {
return false;
}

for (var i = 0; i < oSel.length; i++) {
if (oSel[i].value == oCus.value) {
oSel[i].selected = true;
return false;
}
}

oSel.removeChild(oSel.lastChild); // 清除自定义选项

// 添加input的选项
var cSel = document.createElement("option");
cSel.value = oCus.value;
cSel.innerHTML = oCus.value;
cSel.selected = true;
oSel.appendChild(cSel);

// 补上自定义选项,确保该选项在末尾
cSel = document.createElement("option");
cSel.value = sDefault;
cSel.innerHTML = sDefault;
oSel.appendChild(cSel);
}

};

var intIndex=0;arrList = new Array();
arrList[intIndex++] = "GD001001";
arrList[intIndex++] = "GD001002";
arrList[intIndex++] = "GD001003";
arrList[intIndex++] = "GD001004";
arrList[intIndex++] = "GD001005";
arrList[intIndex++] = "GD001006";
arrList[intIndex++] = "GD001007";
arrList[intIndex++] = "GD001008";
arrList[intIndex++] = "GD001009";
arrList[intIndex++] = "GD0010010";
arrList[intIndex++] = "ABCDEFG";

function test() {
init();
smanPromptList(arrList,"inputer");
}
function init() {
if (arrList.constructor!=Array){alert('smanPromptList初始化失败:第一个参数非数组!');return ;}
arrList.sort( function(a, b) {
if(a.length>b.length)return 1;
else if(a.length==b.length)return a.localeCompare(b);
else return -1;
}
);
}

function smanPromptList(arrList,objInputId){
         var objouter=document.getElementById("__smanDisp") //显示的DIV对象
         var objInput = document.getElementById(objInputId); //文本框对象
         var selectedIndex=-1;
         var intTmp; //循环用的:)

         if (objInput==null) {alert('smanPromptList初始化失败:没有找到"'+objInputId+'"文本框');return ;}
             //文本框失去焦点
             objInput.onblur=function(){
                 objouter.style.display='none';
             }
            
             //文本框按键抬起
             objInput.onkeyup=checkKeyCode;
             //文本框得到焦点
             objInput.onfocus=checkAndShow;
          
             function checkKeyCode(evt){
               evt = evt || window.event;
                 var ie = (document.all)? true:false
                 if (ie){
                     var keyCode=evt.keyCode
                     if (keyCode==40||keyCode==38){ //下上
                         var isUp=false
                         if(keyCode==40) isUp=true ;
                         chageSelection(isUp)
                     }else if (keyCode==13){//回车
                         outSelection(selectedIndex);
                     }else{
                         checkAndShow(evt)
                     }
                 }else{
                     checkAndShow(evt)
                 }
                 divPosition(evt)
             }

//高亮显示
function checkAndShow(){
   var strInput = objInput.value
   if (strInput!=""){
   divPosition();
   selectedIndex=-1;
   objouter.innerHTML ="";
   for (intTmp=0;intTmp<arrList.length;intTmp++){
   for(i=0;i<arrList[intTmp].length;i++){
if (arrList[intTmp].substr(i, strInput.length).toUpperCase()==strInput.toUpperCase()){
     addOption(arrList[intTmp],strInput);
   }
}
   }
   objouter.style.display='';
   }else{
   objouter.style.display='none';
}
function addOption(value,keyw){
var v=value.replace(keyw,"<b><font color=red>"+keyw+"</font></b>");
   objouter.innerHTML +="<div onmouseover=\"this.className='sman_selectedStyle'\" onmouseout=\"this.className=''\" onmousedown=\"document.getElementById('"+objInputId+"').value='" + value + "'\">" + v + "</div>"
}
}
//
             function chageSelection(isUp){
                 if (objouter.style.display=='none'){
                     objouter.style.display='';
                 }else{
                     if (isUp)
                         selectedIndex++
                     else
                         selectedIndex--
                 }
                 var maxIndex = objouter.children.length-1;
                 if (selectedIndex<0){selectedIndex=0}
                 if (selectedIndex>maxIndex) {selectedIndex=maxIndex}
                 for (intTmp=0;intTmp<=maxIndex;intTmp++){

                     if (intTmp==selectedIndex){
                         objouter.children[intTmp].className="sman_selectedStyle";
                     }else{
                         objouter.children[intTmp].className="";
                     }
                 }
             }
             function outSelection(Index){
                 objInput.value = objouter.children[Index].innerText;
                 objouter.style.display='none';
             }
             function divPosition(evt){
                 var left = 0;
              var top   = 0;   
     var e = objInput;
              while (e.offsetParent){
               left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
              top   += e.offsetTop   + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
             e      = e.offsetParent;
             }

            left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
            top   += e.offsetTop   + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);

                 objouter.style.top     = (top   + objInput.clientHeight) + 'px' ;
                 objouter.style.left     = left + 'px' ;
                 objouter.style.width= objInput.clientWidth;
             }
     }
     document.write("<div id='__smanDisp' style='position:absolute;display:none;background:#E8F7EB;border: 1px solid #CCCCCC;font-size:14px;cursor: default;' onbulr> </div>");
     document.write("<style>.sman_selectedStyle{background-Color:#102681;color:#FFFFFF}</style>");
     function getAbsoluteHeight(ob){
         return ob.offsetHeight
     }
     function getAbsoluteWidth(ob){
         return ob.offsetWidth
     }
     function getAbsoluteLeft(ob){
         var mendingLeft = ob .offsetLeft;
         while( ob != null && ob.offsetParent != null && ob.offsetParent.tagName != "BODY" ){
             mendingLeft += ob .offsetParent.offsetLeft;
             mendingOb = ob.offsetParent;
         }
         return mendingLeft ;
     }
     function getAbsoluteTop(ob){
         var mendingTop = ob.offsetTop;
         while( ob != null && ob.offsetParent != null && ob.offsetParent.tagName != "BODY" ){
             mendingTop += ob .offsetParent.offsetTop;
             ob = ob .offsetParent;
         }
         return mendingTop ;
     }
Number.prototype.NaN0 = function()
{
     return isNaN(this)?0:this;
}
</script>
</head>
<body onLoad="test()">
<table width="100%" border="0" align="center">
   <tr>
     <td><table width="100%" border="0" align="center">
       <tr>
         <td align="center" valign="middle"><font color="#0000FF">&nbsp;</font></td>
       </tr>
     </table>
         <div align="center"><font size="2">输入&quot;G&quot;试试效果吧!</font>
         </div>
         <table border="1" align="center" cellspacing="1" bordercolor="#CCCCCC"   id="table1" style="BORDER-COLLAPSE: collapse">
           <tr bgcolor="#99CCFF">
             <td bgcolor="#CCCCCC"><font class="text">1</font></td>
             <td bgcolor="#FFFFFF">
<select name="sel" style="width:160px;" onchange="$.forInput()">
            <option value="选项一">选项一</option>
            <option value="选项二">选项二</option>
           <option value="自定义">自定义</option>
          </select>
          <input type="text" name="custom" id="inputer" size="10" maxlength="10" style="display:none;width:160px;" onblur="$.forSel()"/>
</td>
           </tr>
         </table>
       <br /></td>
   </tr>
</table>

</body></html>
  • 大小: 8.1 KB
  • 大小: 6 KB
  • 大小: 4.8 KB
分享到:
评论
4 楼 yuca2008 2008-12-19  
除了用Extjs外还有什么方法吗?
3 楼 xin163 2008-12-17  
晕还有jquery,晕了,直接用js就能写出来
2 楼 yuca2008 2008-12-16  
minzaipiao 写道

你实现这个功能,代码量也太大了, 不防试试jquery

请问你有例子吗?请给点意见,谢谢!
1 楼 minzaipiao 2008-12-16  
你实现这个功能,代码量也太大了,

不防试试jquery

相关推荐

    像google的文本框的ajaxl例子

    标题中的“像Google的文本框的Ajax例子”指的是在网页中实现类似Google搜索框的实时搜索建议功能,这种功能利用了Ajax(异步JavaScript和XML)技术,可以在用户输入时无需刷新页面就能从服务器获取并显示相关数据。...

    像google的文本框的ajaxl

    这就是一个简单的基于Ajax的实时搜索建议功能实现,它利用JavaScript实现了Google搜索框类似的效果,提供了流畅且无刷新的用户体验。通过学习和实践这一技术,开发者可以更好地理解和掌握Web开发中的异步通信和动态...

    像google的文本框的ajax例子

    标题 "像Google的文本框的Ajax例子" 涉及的是使用Ajax技术来实现类似Google搜索框的实时提示功能。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过...

    网页文本框与日记编辑工具

    为了实现这些特性,开发者需要利用更多的JavaScript库,如Moment.js处理日期和时间,或者Google Maps API显示地理位置。 在压缩包中的“文本编辑器”文件中,很可能是包含了实现这些功能的源代码或者预编译的...

    自动完成输入文本框(附有控件源代码)

    在“Classic”这个文件名中,可能包含的是一个传统的、基于JavaScript和XMLHttpRequest实现的自动完成输入文本框的示例代码。如果你想要深入理解或使用这个例子,可以查看代码并分析其工作原理,包括如何监听事件、...

    点击文本框弹出日历的jquery代码和使用方法

    jQuery是一个流行的JavaScript库,它简化了DOM操作、事件处理以及动画效果,使得实现这样的功能变得轻而易举。本篇文章将详细讲解如何使用jQuery实现点击文本框弹出日历的功能。 首先,你需要引入jQuery库。通常,...

    C#仿google联想输入(ajax)

    在C#中实现仿Google联想输入,首先需要一个后台服务来处理请求。这个服务通常是一个ASP.NET Web API或ASP.NET MVC控制器,它接收来自前端的输入关键字,并基于这些关键字从数据库或其他数据源中检索可能的匹配项。这...

    仿谷歌搜索可键盘下拉提示

    标题中的“仿谷歌搜索可键盘下拉提示”指的是在网页搜索框中实现类似谷歌搜索引擎的自动补全功能,也就是当用户在输入关键字时,搜索框会根据已输入的部分文字给出可能的搜索建议,以帮助用户快速找到他们可能感兴趣...

    仿谷歌,百度地图 jquery

    【标题】"仿谷歌,百度地图 jquery"是一个项目,它旨在通过jQuery库实现类似谷歌地图和百度地图的功能。这个项目的核心在于提供一个交互式的地图体验,用户可以通过在文本框中输入地址或坐标来查看相应位置的地图...

    ajax+jsp仿谷歌搜索引擎

    结合JavaServer Pages (JSP) 和JSON(JavaScript Object Notation)数据格式,可以构建高效、用户友好的搜索功能,就像谷歌搜索引擎中的文本框自动补全功能一样。下面我们将深入探讨如何利用这些技术来实现这一目标...

    asp.net 仿百度搜索栏智能感知实现快速搜索

    最后,为了实现更高级的功能,比如搜索历史记录、热门搜索推荐等,可以考虑将用户的历史搜索数据存储在数据库中,或者利用Google的Autocomplete API等第三方服务。 总结来说,ASP.NET中的智能感知搜索功能是通过...

    可输入下拉列表及文本框自动匹配

    这种功能通过JavaScript、jQuery或其他前端框架实现,通常结合Ajax异步请求来获取服务器端的数据。下拉列表可以使用HTML `&lt;select&gt;` 元素配合JavaScript进行动态更新,或者使用更现代的Web组件如React Select、...

    仿Google的下拉框

    总的来说,"仿Google的下拉框"是一个结合了ASP.NET、AJAX和JSON的实用示例,它展示了如何利用现代Web技术提升用户体验,同时也可以作为学习和实践前端与后端交互的一个良好起点。通过这样的练习,开发者可以提升在...

    web网页开发的各种按钮、文本框的插件的使用

    4. **TextComplete**:这是一个JavaScript自动完成库,适用于文本框和文本区域,可以方便地为搜索框、地址输入等添加建议功能。 5. **Taggle.js**:Taggle.js 是一个简单易用的标签输入插件,让用户在输入框内创建...

    web JavaScript

    最后,JavaScript还可以与多种对象(如播放器、Flash)交互,并利用XMLHttpRequest或iframe实现异步通信,实现页面无刷新更新。 总之,JavaScript作为Web开发中的核心语言,其功能强大且应用广泛。无论是基础的验证...

    google suggest 的实现

    ### Google Suggest 实现原理与关键技术 #### 一、引言 Google Suggest 是一项能够为用户提供即时搜索建议的功能,其工作方式是在用户输入搜索词的过程中动态提供可能的搜索建议,从而帮助用户更快地找到所需的信息...

    ASP.NET源码——仿Google查询并导出Excel源码.zip

    8. **CSS和JavaScript**:为了提升用户体验,项目可能会用到CSS进行样式设计,JavaScript或者jQuery实现页面的动态效果和客户端验证。 9. **部署与配置**:ASP.NET应用需要部署到IIS(Internet Information ...

    100个直接可以拿来用的JavaScript实用功能代码片段

    - **实现方式**:利用`trim`方法来实现。 #### 4. 原生JavaScript替换全部 - **功能概述**:全局替换字符串中的某个子串。 - **应用场景**:用于文本处理、数据清洗等。 - **实现方式**:使用正则表达式的全局匹配...

    jquery实现Google自动下拉框

    本篇将详细解析如何利用jQuery 1.3版本来实现类似于Google搜索建议那样的自动下拉框功能。 #### 二、关键技术点介绍 在本例中,我们主要使用了jQuery库以及简单的JavaScript来实现自动下拉框功能。下面将详细介绍...

    在自己的网页里套上百度搜索引擎,谷歌搜索引擎,文本框中输入文字会显示下拉提示自动补全文字,点百度一下打开百度显示你搜索的文字.zip

    在构建个人网页时,集成第三方搜索引擎,如百度和谷歌,可以极大地提升用户体验,尤其是通过实现自动补全功能,用户在输入关键词时能更快地找到所需信息。本教程将详细介绍如何在网页中嵌入这两个搜索引擎,并实现...

Global site tag (gtag.js) - Google Analytics