华易动力天津网站制作公司 免费咨询热线:400-0022-823 电话:022-28261501 28335110
地址:天津市河西区围堤道146号华盛广场B座22楼
点击这里给我发消息  点击这里给我发消息  点击这里给我发消息
  首页 关于我们 建网站:从这里开始 域名空间服务 案例展示 新闻中心 网站制作知识 网站设计技巧 人才招聘 联系我们  
  网站制作知识
程序制作
数据库知识
域名空间知识
SEO网站优化
天津网站制作方案 更多..
如何获得了大量的好的外链资源
常见的长尾关键词组合方法
如何利用百度平台获取流量
营销优化型网站的简介
新顶级域名的形式
网站建设分为如下八步
网站专题设计
关于门户网站设计方案
华易动力售后服务规范
服务器机房介绍
优秀客户展示(排名无先后) 更多..
环化(天津)燃气设备安装有限公司
天津市国信投资担保有限公司
天津城市职业学院
天津大学EMBA
南开大学CID
北京同仁堂天津药店有限公司
金权道(天津)餐饮管理有限公司
天津市友好合作城市企业促进会
天津天大求实电力新技术股份有限公司
天津红旗农贸投资控股有限公司
天津二人锅餐饮管理有限公司
天津市滨湖剧院
渤海产业投资基金管理有限公司
天津天富软管工业有限公司
新闻中心-行业资讯 更多..
· 企业为什么要做APP   2016-11-24
· 如何搭配网站   2016-11-16
· css表单布局的五个小技巧   2016-11-16
· 服务器维护的重点   2016-11-14
· 如何建设你想要的网站类型   2016-11-14
· 阿里设计师用这2方法提升设计创新力   2016-11-3
· 我们看过的各种设计理论法则   2016-11-3
· Windows 8设计时的安全性   2013-12-27
· 未来网站技术的发展   2013-10-12
· 企业网站建设规划   2013-7-30
全部信息 当前位置:首页网站制作知识 → 详细内容
高仿google suggest ajax示例
更新时间:2012/7/25 点击:1185次
前段时间想用google suggest在网上找了很多都不尽人意,于是自己花了些时间写了一个,跟google suggest 基本一样,后面的约多少结果非本程序范围哦
需要修改的地方有
javascript.js
var url="ajax.asp"; //后台地址
var time_delayajax=300; //搜索延迟
var time_delayupdown=100; //方向键延迟
obj_div.style.top = (xtop + 20) + "px"; //20差不多是输入框的高度,请根据实际情况调整
ajax_xmlhttp.send("sift_value="+escape(temp_value)); //提交到后台的值
dd=d+"<li onmouseover=\"overli("+i+");\" onmousedown=\"downli("+i+")\" onmouseup=\"upli("+i+",event)\" onmousemove=\"moveli();\"><span>约"+c[1]+"结果</span>"+c[0]+"</li>";//****li的显示
后台输出结果格式必需为'文本1,文本2'..... 'java,2''javascript,11''java示例,22'等
default.css
.ajaxsearch { 
  width:300px; //提示层的宽度
}
首页index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="default.css" />
<script language="JavaScript" src="javascript.js" type="text/javascript"></script>
<title>Google suggest高仿示例</title>
</head>
<body onResize="removediv();">
<div style="margin:20px 50px">
<input style="width:298px;height:18px" type="text" autocomplete="off" onBlur="blurdeal();" onKeyDown="keydowndeal(event);" onFocus="focusdeal(event);" />
</div>
</body>
</html>
脚本javascript.js
///////////////////////////////搜索提示框///////////////////////////////// 
var obj_div;     //提示层对象 
var obj_input;     //输入框对象 
var main_delay;     //判断值变化延迟对象 
var ajax_delay;     //ajax延迟搜索对象 
var updown_delay;    //方向键延迟对象 
var ajax_xmlhttp;    //ajax对象 
var div_word=null;    //当前提示层对应的搜索值 
var li_num=-1;     //伪光标位置,提示层被选中的li序号,从0开始 
var li_down=-1;     //鼠标按下提示层的序号 
var value_ed='';    //输入框延迟前的值 
var value_ing='';    //输入框当前的值 
var value_unexit='';   //搜索过没有结果的值开头 
var updown_run=false;   //允许方向键上下 
var ajax_run=false;    //true为正常进程,false停止ajax 
var ajax_run_ing=false;   //true正在运行,false空闲 
var input_focus=false;   //文本框焦点 
var url='ajax.asp';    //后台地址********************************************************** 
var time_delayajax=300;   //搜索延迟********************************************************** 
var time_delayupdown=100;  //方向键延迟******************************************************** 
 
var $=function(Fun_id){ 
 return document.getElementById(Fun_id); 

try{ 
 ajax_xmlhttp= new ActiveXObject('Msxml2.XMLHTTP'); 
}catch(e){ 
 try{ 
  ajax_xmlhttp= new ActiveXObject('Microsoft.XMLHTTP'); 
 }catch(e){ 
  try{ 
   ajax_xmlhttp= new XMLHttpRequest(); 
  }catch(e){ajax_xmlhttp=null;} 
 } 

////////////////////////创建提示层//////////////////////// 
function createajaxdiv(){ 
 var create_div = document.createElement('div'); 
 create_div.type = 'div'; 
 var promptdiv = document.body.appendChild(create_div); 
 promptdiv.className = 'ajaxsearch'; 
 obj_div=promptdiv; 

////////////////////////设置提示层位置//////////////////////// 
function removediv(){ 
 if(!obj_div || !obj_input)return false; 
 if(obj_div.style.display=='none')return false; 
 var obj=obj_input; 
 var xtop=0; 
 var xleft=0; 
 while(obj){ 
  xtop += obj['offsetTop']; 
  xleft += obj['offsetLeft']; 
  obj = obj.offsetParent; 
 } 
 obj_div.style.left = xleft + 'px'; 
 obj_div.style.top = (xtop + 20) + 'px';    //20差不多是输入框的高度,请根据实际情况调整************************************************************8 
 li_down=-1; 

////////////////////////隐藏提示层//////////////////////// 
function hideajaxdiv(){ 
 obj_div.style.display='none'; 
 li_down=-1; 

////////////////////////设置被选<li>css样式//////////////////////// 
function setlistyle(){ 
 for(var i=0;i<obj_div.firstChild.childNodes.length;i++){ 
  obj_div.firstChild.childNodes[i].id=''; 
 } 
 if(li_num!=-1)obj_div.firstChild.childNodes[li_num].id='liseleted'; 

////////////////////////鼠标经过提示层//////////////////////// 
function overli(Fun_seletedlinum){ 
 if(li_num==-1)value_ing=obj_input.value; 
 li_num=Fun_seletedlinum; 
 setlistyle(); 

////////////////////////鼠标拖动提示层//////////////////////// 
function moveli(){ 
 if(window.getSelection){ 
  setfocus(); 
  window.getSelection().removeAllRanges(); 
 }else{ 
  document.selection.empty(); 
  setfocus(); 
 } 

////////////////////////鼠标按下提示层//////////////////////// 
function downli(Fun_seletedlinum){ 
 if(!obj_input)return false; 
 li_down=Fun_seletedlinum; 
 input_focus=true; 

////////////////////////鼠标弹起提示层//////////////////////// 
function upli(Fun_seletedlinum,Fun_event){ 
 if(!obj_input)return false; 
 if(Fun_event.button==2){li_down=-1;return} 
 if(li_down!=Fun_seletedlinum){ 
  li_down=-1; 
  return false; 
 } 
 clearTimeout(ajax_delay); 
 clearTimeout(updown_delay); 
 updown_run=true; 
 ajax_run=false; 
 ajax_run_ing=false; 
 li_num=-1; 
 div_word=null; 
 
 value_ed=obj_div.firstChild.childNodes[Fun_seletedlinum].childNodes[1].nodeValue; 
 obj_input.value=value_ed; 
 value_ing=value_ed; 
 hideajaxdiv(); 
 obj_div.innerHTML=''; 

////////////////////////设置文本框获取焦点/////////////////////// 
function setfocus(){ 
 if(window.event){ 
  var r = obj_input.createTextRange(); 
  r.moveStart('character',obj_input.value.length); 
  r.collapse(true); 
  r.select(); 
 }else{ 
  obj_input.selectionStart=obj_input.value.length; 
  obj_input.focus(); 
 } 

////////////////////////文本框失去焦点//////////////////////// 
function blurdeal(){ 
 if(input_focus==true){ 
  setfocus(); 
  setTimeout('setfocus()'); 
  return false; 
 } 
 updown_run=false; 
 ajax_run=false; 
 ajax_run_ing=false; 
 clearInterval(main_delay); 
 clearTimeout(ajax_delay); 
 clearTimeout(updown_delay); 
 hideajaxdiv(); 
 if(value_ed!=obj_input.value)obj_div.innerHTML=''; 

////////////////////////文本框获取焦点//////////////////////// 
function focusdeal(Fun_event){ 
 if(!obj_div)createajaxdiv(); 
 if(input_focus==true){ 
  input_focus=false; 
  return false; 
 } 
 var obj=((window.event)?Fun_event.srcElement:Fun_event.target); 
 if(obj.type!='text')return false; 
 updown_run=true; 
 ajax_run=true; 
 ajax_run_ing=false; 
 if(obj_input==obj &amp;&amp; value_ed==obj.value &amp;&amp; obj_div.innerHTML!=''){ 
  obj_div.style.display='block'; 
  removediv(); 
 }else{ 
  obj_input=obj; 
  value_ed=obj.value; 
  value_ing=obj.value; 
  value_unexit=''; 
  li_num=-1; 
  li_down=-1; 
  div_word=null; 
  obj_div.innerHTML=''; 
  removediv(); 
 } 
 main_delay=setInterval('mainajax()',10); 

////////////////////////主函数//////////////////////// 
function mainajax(){ 
 if(value_ed==obj_input.value)return false; 
 if(value_unexit!='' &amp;&amp; (obj_input.value).indexOf(value_unexit)==0){hideajaxdiv();obj_div.innerHTML='';return false;} 
 if(value_ed!=obj_input.value &amp;&amp; ajax_run_ing==false){ 
  ajax_run=true; 
  value_ed=obj_input.value; 
  clearTimeout(ajax_delay); 
  if(obj_input.value!=''){ 
   ajax_delay=setTimeout('getsearch();',time_delayajax); 
  }else{ 
   hideajaxdiv(); 
   obj_div.innerHTML=''; 
   ajax_run=false; 
return false; 
    
  }   
 } 

////////////////////////获取搜索内容//////////////////////// 
function getsearch(){ 
 var temp_value=obj_input.value; 
 if(ajax_xmlhttp==null){ 
  return false; 
 }else if(ajax_xmlhttp.readyState!=0){ 
  ajax_xmlhttp.abort(); 
  ajax_run_ing=false; 
 } 
 ajax_xmlhttp.onreadystatechange=function(){ 
  if(ajax_run==false){ajax_xmlhttp.abort();ajax_run_ing=false;return false;} 
  if(ajax_xmlhttp.readyState==4){ 
   obj_div.innerHTML=''; 
if(ajax_xmlhttp.status==200 || ajax_xmlhttp.status==304){ 
    var contant=ajax_xmlhttp.responseText; 
    if(contant!='' &amp;&amp; ajax_run==true){ 
     div_word=temp_value; 
     obj_div.innerHTML=resetcontant(contant); 
     obj_div.style.display='block'; 
     removediv();removediv(); 
    }else{ 
     hideajaxdiv(); 
    } 
    updown_run=true; 
    ajax_run_ing=false; 
    li_num=-1; 
    if(contant=='')value_unexit=temp_value; 
   } 
  } 
 } 
 ajax_xmlhttp.open('post',url,true); 
 ajax_xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); 
 ajax_run_ing=true; 
 ajax_xmlhttp.send('sift_value='+escape(temp_value)); //提交到后台的值***************************************** 

////////////////////////内容重组/////////////////////// 
function resetcontant(Fun_contant){ 
 if(Fun_contant==null || Fun_contant=='')return ''; 
 var a=Fun_contant.substring(1,Fun_contant.length-1); 
 if(Fun_contant==null || Fun_contant=='')return ''; 
 var b=a.split(''''); 
 var c; 
 var d; 
 d='<ul>'; 
 for(var i in b){ 
  c=b[i].split(','); 
  //*************************************************************** 
  d=d+'<li onmouseover=\'overli('+i+');\' onmousedown=\'downli('+i+')\' onmouseup=\'upli('+i+',event)\' onmousemove=\'moveli();\'><span>约'+c[1]+'结果</span>'+c[0]+'</li>'; 
  //*************************************************************** 
 } 
 d=d+'<li onmousedown=\'input_focus=true;li_down=-1;\' onmouseup=\'li_down=-1\' onmousemove=\'moveli();\'><span><a class=\'shutajaxdiv\' onclick=\'hideajaxdiv();\'>关闭</a></span></li>'
 d=d+'</ul>'; 
 return d; 

////////////////////////键盘事件//////////////////////// 
function keydowndeal(Fun_event){ 
 var keyc=((window.event)?Fun_event.keyCode:Fun_event.which); 
 if(keyc==13){hideajaxdiv();return false;} 
 if(keyc==27){ 
  if(obj_div.style.display=='block' &amp;&amp; li_num>-1)value_ed=obj_input.value=value_ing; 
  hideajaxdiv(); 
  return false; 
 }  
 if(keyc==40 || keyc==38){ 
  if(div_word==obj_input.value &amp;&amp; obj_div.style.display=='none' &amp;&amp; obj_div.innerHTML!=''){ 
   obj_div.style.display='block'; 
   removediv(); 
return false; 
  } 
  if(li_num==-1){ 
if(div_word!=obj_input.value)return false; 
  }else{ 
if(div_word!=value_ing)return false; 
  } 
  if(updown_run==false || ajax_run_ing==true || obj_div.style.display=='none')return false; 
  updown_delay=setTimeout('updownli('+keyc+')',time_delayupdown); 
  updown_run=false; 
 } 

////////////////////////方向键移动li//////////////////////// 
function updownli(Fun_key){ 
 if(!obj_div){return false;} 
 updown_run=true; 
 if(li_num==-1){ 
  if(div_word!=obj_input.value){hideajaxdiv();obj_div.innerHTML='';li_num=-1;return false;} 
 }else{ 
  if(div_word!=value_ing){hideajaxdiv();obj_div.innerHTML='';li_num=-1;return false;} 
 } 
 if(updown_run==false)return false; 
 if(li_num==-1)value_ing=value_ed; 
 if(Fun_key==40){ 
  if(li_num<obj_div.firstChild.childNodes.length-2){ 
   li_num++; 
  }else{ 
   li_num=-1; 
  } 
 } 
 if(Fun_key==38){ 
  if(li_num>=0){ 
   li_num--; 
  }else{ 
   li_num=obj_div.firstChild.childNodes.length-2; 
  } 
 } 
 if(li_num!=-1){ 
  value_ed=obj_input.value=obj_div.firstChild.childNodes[li_num].childNodes[1].nodeValue; 
 }else{ 
  value_ed=obj_input.value=value_ing; 
 } 
 setlistyle(); 
后台ajax.asp
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001" %>
<%option explicit%>
<%Response.CodePage="65001"%>
<%Response.Charset="utf-8" %>
<!--#include file="conn.asp"-->
<%
dim Sift_value
dim Sql,Rs,I,Num
dim Contant
Contant=""
Num=10
Sift_value=replace(unescape(request.form("sift_value")),"""","""""")
Sql="select top "&Num&" keyword,matchnum from search where keyword like """&Sift_value&"%"" order by id"
set Rs=server.CreateObject("adodb.recordset")
Rs.open Sql,Conn,1,1
if not (Rs.eof and Rs.bof) then
for I=0 to Num-1
Contant=Contant&"'"&rs(0)&","&rs(1)&"'"
Rs.movenext
if Rs.eof then exit for
next
end if
response.Write(Contant)
Rs.close
 
  公司总机:022-28261501 28335110
客户服务邮箱:service@nfree.cn,手机直线:15822335163
CopyRight 2006~2024 All Rights Reserved 天津市华易动力信息科技有限公司
地址:天津市河西区围堤道146号华盛广场B座22楼 邮编:300202

津公网安备 12010302001042号


在线QQ(售前咨询)
点击这里给我发消息  点击这里给我发消息  点击这里给我发消息