原文地址: http://cceer.xmu.edu.cn/blog/view.asp?id=55
*项目名称:AJAX实现类Google Suggest效果
*作者:草履虫
*联系:caolvchong@gmail.com
*时间:2007-7-7
*起因:
建发实习面试时有提到这个问题,回来就考虑去实践一下,结果花了不少时间.主要是javascript在前台的表现问题,数据库结构设计等.网上有少数的几个dom教程,没有值得借鉴的地方,而<<征服Ajax web2.0开发技术详解>>中第16章 搜索提示(suggest)中那个例子实在是简陋(当然是说javascript表现部分),而且数据库用MSSQL,后台语言用JSP,和自己熟悉的格格不入(虽然都是以后要接触的),所以自己动手了.模仿效果:Google Suggest
*开发平台:Windows2003 IIS6.0 Access数据库
*工具:DreamWeaver(写ASP),Aptana(写Javascript,HTML和CSS),Emeditor(写这篇文章),Access2003(数据库)
*测试平台:Firefox2.0,IE6.0,IE7.0
*演示地址:http://finish.3322.org/suggest/index.htm(短期有效,在本机上,可能访问不顺畅)
*:文件结构:
index.htm:首页,展现效果
ajax_result.asp:ajax调用后台返回结果文件
result.asp:搜索结果文件,这个我并没有做,具体功能根据需求来写
数据库(suggest.mdb):
id:自动编号
keyword:关键字
seachtimes:被搜索次数
matchnum:匹配的文章数目(关于这个方面想了蛮久,如何取得文章数呢,不能是搜索时动态产生,不然在偌大数据库中查询费时费力.那么必然是在后台某个时候去其他的数据库表中添加的,原来想把这方面也做了,但限于算法的不成熟和时间的限制.所以就用了随机数来替换.)
*开发过程遇到问题:
1.CSS方面:遇到了IE双倍浮动边界Bug(float:left下的margin-left是设置的两倍,用display:inline消除)
2.javascript方面:
一个是那个全局变量j的上下界问题着实让我乱了一会,还好理清了思路
按键事件的兼容性问题:IE的keyCode,其他浏览器的which事件
onkeypress和onkeyup,onkeydown事件的区别:onkeypress只接受数字和字母,不接受系统按键(如上下
方向键)
使用submit()方法时不能定义某个标签的id或name为submit,不然将提示缺少对象
还有一些细节判断问题,也让我费了不少神
3.html方面:
如何让表单不记忆(在firefox下自动记忆会挡主ajax部分,而google中就没有这样的提示功能,所以去掉了表单记忆功能),只要在form中加一个autocomplete="off"
*补充:
和google suggest还有一些差距,比如一直按着方向键问题和其他细节问题,这些都有待改进.
*效果图:
限于文章长度,只帖首页和js,其他的去附件下载:
草履虫--仿googlesuggest.rar
首页:index.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<title>草履虫---简易Google Suggest</title>
<link type="text/css" rel="stylesheet" href="suggest.css"/>
<script type="text/javascript" src="suggest.js"></script>
</head>
<body onclick="hide_suggest();">
<img src=http://www.webjx.com/javascript/"suggest.gif" onclick="hide_suggest();" />
<form action="result.asp" method="post" name="search" autocomplete="off">
<!--input type="text" name="keyword" id="keyword" onkeyup="keydeal(event);" onclick="keydeal(event);"/-->
<input type="text" name="keyword" id="keyword" onkeyup="keyupdeal(event);" onkeydown="keydowndeal(event);" onclick="keyupdeal(event);"/>
<input type="submit" value="手气不错"/>
<div id="suggest"></div>
</form>
</body>
</html>
suggest.js view plaincopy to clipboardprint?
var j=-1;
var temp_str;
var $=function(node){
return document.getElementById(node);
}
var $$=function(node){
return document.getElementsByTagName(node);
}
function ajax_keyword(){
var xmlhttp;
try{
xmlhttp=new XMLHttpRequest();
}
catch(e){
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4){
if (xmlhttp.status==200){
var data=xmlhttp.responseText;
$("suggest").innerHTML=data;
j=-1;
}
}
}
xmlhttp.open("post", "ajax_result.asp", true);
xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlhttp.send("keyword="+escape($("keyword").value));
}
function keyupdeal(e){
var keyc;
if(window.event){
keyc=e.keyCode;
}
else if(e.which){
keyc=e.which;
}
if(keyc!=40 && keyc!=38){
ajax_keyword();
temp_str=$("keyword").value;
}
}
function set_style(num){
for(var i=0;i<$$("li").length;i++){
var li_node=$$("li")[i];
li_node.className="";
}
if(j>=0 && j<$$("li").length){
var i_node=$$("li")[j];
$$("li")[j].className="select";
}
}
function mo(nodevalue){
j=nodevalue;
set_style(j);
}
function form_submit(){
if(j>=0 && j<$$("li").length){
$$("input")[0].value=$$("li")[j].childNodes[0].nodeValue;
}
document.search.submit();
}
function hide_suggest(){
var nodes=document.body.childNodes
for(var i=0;i<NODES.LENGTH;I++){ if(j j++; if(j<$$(?li?).length){ if(keyc="=40" keyc="e.keyCode;" || } if(e.which){ else if(window.event){ keyc; var keydowndeal(e){ function ; $(?suggest?).innerHTML="" if(nodes[i]!='$("keyword")){'>=$$("li").length){
j=-1;
}
}
if(j>=$$("li").length){
j=-1;
}
}
if(keyc==38){
if(j>=0){
j--;
if(j<=-1){
j=$$("li").length;
}
}
else{
j=$$("li").length-1;
}
}
set_style(j);
if(j>=0 && j<$$("li").length){
$("keyword").value=$$("li")[j].childNodes[0].nodeValue;
}
else{
$("keyword").value=temp_str;
}
}
}
本篇文章来源于 极品源码 原文链接:http://www.jpcode.com/html/jiaobenyuyan/Javascript_Ajax/1011Z92010909.html
分享到:
相关推荐
在本文中,我们将深入探讨如何使用AJAX技术来实现一个仿Google Suggest的搜索提示功能。Google Suggest是Google搜索引擎中的一个特色功能,它在用户输入关键词时提供实时的搜索建议,极大地提高了搜索效率和用户体验...
**Ajax仿Google Suggest数据库版**是基于Ajax技术实现的一种搜索建议功能,它模拟了Google搜索引擎在用户输入关键字时实时显示搜索建议的效果。这个项目主要使用Java作为后端语言,结合Ajax技术,为前端用户提供流畅...
**标题解析:** "ajax-类似google suggest 的一个简单例子" 这个标题指出我们将讨论一个使用Ajax技术实现的功能,该功能类似于Google搜索中的自动建议(Google Suggest)。Google Suggest是Google搜索引擎的一个特性...
Google Suggest的实现基于AJAX技术,能够实现在不刷新整个页面的情况下,与服务器进行异步通信,获取并显示数据。 【ASP.NET & AJAX 实现】 1. **AJAX 基础**:在ASP.NET中,我们可以使用内置的ASP.NET AJAX库(也...
本文将介绍如何使用AJAX技术来实现类似Google Suggest的功能,这是一种实时的、基于用户输入的搜索建议机制。Google Suggest通过在用户输入关键词时动态提供搜索建议,提高了用户体验,减少了不必要的键盘输入。以下...
Google Suggest正是利用了Ajax的核心特性,实现了在用户输入搜索关键词时,实时向服务器发送请求,获取相关建议,并在页面上动态展示。 在Google Suggest中,用户在搜索框中输入字符时,触发`onkeyup`事件,这是一...
【标题】"GoogleSuggest ajax自动补全"是基于AJAX和jQuery技术实现的一个功能,它主要用于提升用户体验,提供在用户输入时实时显示搜索建议的功能。这个功能在很多搜索引擎和网站中都有应用,比如Google搜索,它能...
**Ajax实战:Google Suggest风格搜索** Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,大大提升...
总结来说,"仿Google Suggest提示效果"是一个涉及前后端交互、JavaScript编程、Ajax通信、数据库查询优化以及用户体验设计的综合技术话题。通过学习和实践这一技术,开发者可以提升其Web应用的交互性和用户体验。
3. **AjaxControlToolkit**:除了内置的ASP.NET AJAX框架,还有第三方的AjaxControlToolkit,它提供了许多预构建的Ajax控件和扩展,如AutoCompleteExtender,可以用于实现类似Google Suggest的效果。 综上所述,...
综上所述,"jsp+ajax实现googleSuggest(全)"项目涵盖了JSP、AJAX以及前端交互设计等多个技术点,通过它们的结合,可以实现类似Google搜索框的智能提示功能,提升用户体验。在实际开发中,还需要考虑性能优化、错误...
Google Suggest 的前端主要采用了 Ajax 技术来实现动态加载搜索建议。Ajax(Asynchronous JavaScript and XML,异步 JavaScript 和 XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过这种...
AJAX实现类Google Suggest效果 *测试平台:Firefox2.0,IE6.0,IE7.0 *演示地址:http://www.okajax.com/demo/suggest/ *:文件结构: index.htm:首页,展现效果 ajax_result.asp:ajax调用后台返回结果文件 result.asp:...
本实例将探讨如何将这两者整合,通过AJAX技术实现一个仿Google Suggest的自动补全功能,该功能通常用于输入框中,为用户提供动态搜索建议。我们将详细解析这个实例中的各个组成部分。 首先,`index.jsp`是用户界面...
Ajax技术的应用非常广泛,例如Google Earth、Google Suggest、Gmail等都是使用Ajax技术的代表性应用。Ajax技术的应用也使得微软感到尴尬,因为微软早在1997年就已经发明了Ajax中的关键技术,但是却没有看到它的潜力...
刚学ajax没多久,自己写了一个类似google suggest的效果,总算是实现了。对于刚学ajax的新手还可以看看,老手就没必要了。希望能够与大家多多交流,也希望大家提出批评和建议。 使用方法:解压后防在一个文件夹下...
### AJAX Suggest技术详解 #### 一、简介 在现代Web开发中,为了提升用户体验,很多网站都会采用一种类似于谷歌的模糊搜索功能——即用户在输入框中输入内容时,系统能够实时提供相关的建议列表。这种功能常被称为...
GoogleSuggest是这一技术的优秀实例,其背后的实现涉及到高效的数据检索、算法优化以及流畅的用户体验设计。理解并掌握Ajax自动完成的原理和实现方式,对于开发高效、用户友好的Web应用至关重要。
在本文中,我们将深入探讨AJAX技术在JavaScript库jQuery中的应用,特别是通过一个实战案例——仿谷歌搜索建议(Google Suggest)的自动补全功能。这个功能广泛应用于各种搜索框,能够极大地提升用户体验,使用户在...