google热门词(近似词)自动提示源代码
在google的搜索框中输入搜索信息的时候,搜索框下方会自动弹出与输入信息内容相近似的列表提示框,供用户选择。
自动提示框的原理是把一些热门(近似)词语放在一个数组中,当输入内容时,程序自动进行对比将内容相近的词排列出来。这些热门词语可以手工赋值给数组,也可以利用ASP,PHP等语言与数据库结合,动态生成搜索内容并赋值给数组。
一、操作步骤:
1、准备词组设计提示框:
- document.write("<div id='__smanDisp' style='position:absolute; display:none; background:#E8F7EB; border: 1px solid #CCCCCC; font-size:14px; cursor: default;' onbulr> </div>"); //根据自己喜欢修改样式
- objInput.onblur=fuction()
- {
- objouter.style.display='none';
- }
- function dearray(aa)//定义array
- {
- arrList = aa.split(',');
- }
- dearray("1111,222,222a,aaa,aa1,bb,b222,b3,323313,3213,32213,dsfsdddd");//初始化提示框的内容
2、提示框中显示相近词组:
- var strInput = objInput.value;//设置为搜索的内容
- if (strInput!="")
- { // 搜索框中内容不为空时响应,即弹出提示框
- divPosition();
- selectedIndex=-1;
- objouter.innerHTML ="";
- for (intTmp=0;intTmp<arrList.length;intTmp++)
- {
- if (arrList[intTmp].substr(0, strInput.length)==strInput)
- {
- addOption(arrList[intTmp]); // 显示相似结果
- }
- }
- objouter.style.display=''; //显示层
- }else{
- objouter.style.display='none'; //没有内容,不显示
- }
- function addOption(value)
- {
- objouter.innerHTML +="<div onmouseover=/"this.className='sman_selectedStyle'/" onmouseout=/"this.className=''/" onmousedown=/"document.getElementById('"+objInputId+"').value='" + value + "'/">" + value + "</div>"
- }
3、自动弹出提示框:
- function getIE(e) // e为对应的文本框对象
- {
- var pos = new Array();
- var t = e.offsetTop;
- var l = e.offsetLeft;
- while(e=e.offsetParent)
- {
- t += e.offsetTop;// 文本框距上方或上层控件的位置
- l += e.offsetLeft;// 文本框距左方或上层控件的位置
- }
- pos[0]=t;
- pos[1]=l;
- return pos;
- }
- function divPosition(objInput)//objInput为对应的文本框对象
- {
- arrPos = getIE(objInput);
- objouter.style.top = arrPos[0] +20;//提示框显示在文本框下方
- objouter.style.left = arrPos[1];
- objouter.style.width= getAbsoluteWidth(objInput);//宽度与文本框一致
- }
二、源代码:
1、脚本函数源代码:
- <script language="javascript">
- var intIndex=0;arrList = new Array();
- function test()
- {
- dearray("1111,222,222a,aaa,aa1,bb,b222,b3,323313,3213,32213,dsfsdddd");
- smanPromptList(arrList,"inputer1");
- smanPromptList(arrList,"inputer2");
- smanPromptList(arrList,"inputer3")
- }
- function dearray(aa)//定义array
- {
- arrList = aa.split(',');
- }
- function getAbsoluteWidth(ob)
- {
- return ob.offsetWidth
- }
- 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(){
- var ie = (document.all)? true:false
- if (ie){
- var keyCode=event.keyCode
- if (keyCode==40||keyCode==38){ //下上
- var isUp=false
- if(keyCode==40) isUp=true ;
- chageSelection(isUp)
- }else if (keyCode==13){//回车
- outSelection(selectedIndex);
- }else{
- checkAndShow()
- }
- }else{
- checkAndShow()
- }
- divPosition()
- }
- function checkAndShow(){
- var strInput = objInput.value
- if (strInput!=""){
- divPosition();
- selectedIndex=-1;
- objouter.innerHTML ="";
- for (intTmp=0;intTmp<arrList.length;intTmp++){
- if (arrList[intTmp].substr(0, strInput.length)==strInput){
- addOption(arrList[intTmp]);
- }
- }
- objouter.style.display='';
- }else{
- objouter.style.display='none';
- }
- function addOption(value){
- objouter.innerHTML +="<div onmouseover=/"this.className='sman_selectedStyle'/" onmouseout=/"this.className=''/" onmousedown=/"document.getElementById('"+objInputId+"').value='" + value + "'/">" + value + "</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(){
- var clx,cly;
- clx=event.clientX;
- cly = event.clientY;
- objouter.style.top = cly+10;
- objouter.style.left = clx+20;
- objouter.style.width= getAbsoluteWidth(objInput)
- }
- }
- 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>");
- </script>
2、在HTML中引用的源代码:
- <body onLoad="test()">
- <table border="1" align="center" cellspacing="1" bordercolor="#9CD7FF" id="table1" style="BORDER-COLLAPSE: collapse" >
- <tr bgcolor="#99CCFF">
- <td bgcolor="#CEE3FF"><font class="text">查询1</font></td>
- <td bgcolor="#FFFFFF"><input type="text" id="inputer1"></td>
- </tr>
- <tr bgcolor="#99CCFF">
- <td bgcolor="#CEE3FF"><font class="text">查询2</font></td>
- <td bgcolor="#FFFFFF"><input type="text" id="inputer2"></td>
- </tr>
- <tr bgcolor="#99CCFF">
- <td height="24" bgcolor="#CEE3FF"><font class="text">查询3</font></td>
- <td height="24" bgcolor="#FFFFFF"><input type="text" id="inputer3"></td>
- </tr>
- </table>
- </body>
(《电脑报》2008年第18期)