`
feng5588feng
  • 浏览: 12492 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

高仿google suggest ajax示例

阅读更多
前段时间想用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 && value_ed==obj.value && 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!='' && (obj_input.value).indexOf(value_unexit)==0){hideajaxdiv();obj_div.innerHTML='';return false;} 
if(value_ed!=obj_input.value && 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!='' && 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' && li_num>-1)value_ed=obj_input.value=value_ing; 
  hideajaxdiv(); 
  return false; 
}  
if(keyc==40 || keyc==38){ 
  if(div_word==obj_input.value && obj_div.style.display=='none' && 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
set Rs=nothing
%>
分享到:
评论

相关推荐

    GoogleSuggest ajax自动补全

    【标题】"GoogleSuggest ajax自动补全"是基于AJAX和jQuery技术实现的一个功能,它主要用于提升用户体验,提供在用户输入时实时显示搜索建议的功能。这个功能在很多搜索引擎和网站中都有应用,比如Google搜索,它能...

    ajaxSuggest示例代码

    AjaxSuggest是一个JavaScript库,主要用于实现异步的自动补全功能,常见于搜索框或输入字段,提升用户体验。它利用Ajax技术从服务器获取数据,并在用户输入时动态更新建议列表。下面将详细介绍AjaxSuggest的工作原理...

    google suggest 实现 ajax应用

    【标题】:Google Suggest 实现 AJAX 应用 在当今的Web开发中,AJAX(Asynchronous JavaScript and XML)技术被广泛应用于创建交互性更强、用户体验更佳的网页应用。本主题主要聚焦于如何使用ASP.NET框架实现一个...

    ajax仿google suggest 数据库版

    **Ajax仿Google Suggest数据库版**是基于Ajax技术实现的一种搜索建议功能,它模拟了Google搜索引擎在用户输入关键字时实时显示搜索建议的效果。这个项目主要使用Java作为后端语言,结合Ajax技术,为前端用户提供流畅...

    search suggest using ajax

    在这个“search_suggest”项目中,可能包含以下文件: - index.html:HTML页面,包含搜索框和用于显示建议的DOM元素。 - script.js:JavaScript文件,实现Ajax请求和DOM操作逻辑。 - server.php(或其他后端脚本)...

    struts2 json ajax示例 google提示

    在这个"struts2 json ajax示例 google提示"中,我们将探讨如何在Struts2框架中利用JSON和AJAX技术实现Google搜索建议那样的动态数据加载功能。 首先,我们需要在Struts2项目中集成JSON插件。Struts2 JSON插件提供了...

    AJAX实现仿Google Suggest搜索提示效果

    在本文中,我们将深入探讨如何使用AJAX技术来实现一个仿Google Suggest的搜索提示功能。Google Suggest是Google搜索引擎中的一个特色功能,它在用户输入关键词时提供实时的搜索建议,极大地提高了搜索效率和用户体验...

    google suggest 的实现

    Google Suggest 的前端主要采用了 Ajax 技术来实现动态加载搜索建议。Ajax(Asynchronous JavaScript and XML,异步 JavaScript 和 XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过这种...

    ajax-类似google suggest 的一个简单例子

    **标题解析:** "ajax-...通过学习这个简单的Ajax-Google Suggest示例,开发者可以深入了解如何结合JavaScript、ASP和Ajax技术创建动态、交互式的Web应用程序。这不仅是一个实用的技能,也是现代Web开发中的基础概念。

    基于Ajax的Google Suggest 开发

    Google Suggest正是利用了Ajax的核心特性,实现了在用户输入搜索关键词时,实时向服务器发送请求,获取相关建议,并在页面上动态展示。 在Google Suggest中,用户在搜索框中输入字符时,触发`onkeyup`事件,这是一...

    这两天做了个类似Google suggest的搜索功能的Ajax代码,当然这段代码是在AJAX基础教程中示例4.9的基础上修改完成的.

    这里,我们基于一个名为“AJAX基础教程”的示例4.9,构建了一个类似于Google Suggest的搜索功能。 首先,Google Suggest是谷歌搜索引擎中的一个特性,当用户在搜索框中输入文字时,它会即时提供可能的搜索建议。这...

    AJAX实现仿Google Suggest效果

    本文将介绍如何使用AJAX技术来实现类似Google Suggest的功能,这是一种实时的、基于用户输入的搜索建议机制。Google Suggest通过在用户输入关键词时动态提供搜索建议,提高了用户体验,减少了不必要的键盘输入。以下...

    AJAX GOOGLE小示例

    **标题解析:** "AJAX Google小示例" 指的是一个使用 AJAX(Asynchronous JavaScript and XML)技术实现的谷歌搜索提示功能的简化版本。这个示例旨在演示如何通过AJAX技术实现实时的搜索建议,让用户在输入查询时...

    AJAX学习总结(九)---Jquery实例:仿googlesuggest自动补全功能

    在本文中,我们将深入探讨AJAX技术在JavaScript库jQuery中的应用,特别是通过一个实战案例——仿谷歌搜索建议(Google Suggest)的自动补全功能。这个功能广泛应用于各种搜索框,能够极大地提升用户体验,使用户在...

    Ajax无刷新和GoogleSuggest

    3. **AjaxControlToolkit**:除了内置的ASP.NET AJAX框架,还有第三方的AjaxControlToolkit,它提供了许多预构建的Ajax控件和扩展,如AutoCompleteExtender,可以用于实现类似Google Suggest的效果。 综上所述,...

    jsp+ajax实现googleSuggest(全)

    本文将深入探讨如何使用JSP和AJAX技术来实现Google Suggest的效果,即用户在输入框中输入内容时,系统能够实时提供相关的建议列表,支持鼠标和键盘进行选择。这一功能广泛应用于搜索引擎、网站表单以及其他需要动态...

    类似google suggest

    【标题】:“类似Google Suggest”的Ajax实现 在IT领域,Google Suggest是谷歌搜索引擎提供的一项功能,它根据用户在搜索框中输入的关键词实时显示相关的搜索建议。这个功能极大地提高了搜索效率,优化了用户体验。...

    仿Google Suggest提示效果

    总结来说,"仿Google Suggest提示效果"是一个涉及前后端交互、JavaScript编程、Ajax通信、数据库查询优化以及用户体验设计的综合技术话题。通过学习和实践这一技术,开发者可以提升其Web应用的交互性和用户体验。

    java与jQuery整合ajax仿googleSuggest自动补全实例

    本实例将探讨如何将这两者整合,通过AJAX技术实现一个仿Google Suggest的自动补全功能,该功能通常用于输入框中,为用户提供动态搜索建议。我们将详细解析这个实例中的各个组成部分。 首先,`index.jsp`是用户界面...

Global site tag (gtag.js) - Google Analytics