`

用AJAX实现google输入自动完成的简单模拟

    博客分类:
  • Ajax
阅读更多
比较简单的模拟,文本框输入CompanyName,然后
搜索SqlServer2000 里NorthWind数据库 Suppliers表的CompanyName字段,
然后实现自动完成

四个文件
<!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>
     <title>输入自动完成</title>
     <script language="javascript">
        //输入信息的文本框
        var txtInput;
        //下拉表当前选中项的索引 
        var currentIndex = -1; 
       
        //初始化参数,和下拉表位置
        function initPar()
         {
              txtInput = document.getElementById("txtCompanyName");
             //设置下拉表 相对于 文本输入框的位置 
              setPosition();
         } 
        
        //设置下拉表 相对于 文本输入框的位置
        function setPosition()
         {
            var width = txtInput.offsetWidth;
            var left = getLength("offsetLeft");
            var top = getLength("offsetTop") + txtInput.offsetHeight;
           
             divContent.style.left = left + "px";
             divContent.style.top = top + "px"; 
             divContent.style.width = width + "px";
         } 
        
       //获取对应属性的长度 
        function getLength(attr)
         {
            var offset = 0;
            var item = txtInput;
            while (item)
             {
                 offset += item[attr];
                 item = item.offsetParent;
             } 
            return offset; 
         } 

        //自动完成
        function autoComplete()
         {
            //如果按下 向上, 向下 或 回车
            if (event.keyCode == 38 || event.keyCode == 40 || event.keyCode == 13)
             { 
                //选择当前项 
                 selItemByKey();
             } 
            else //向服务器发送请求
             { 
                //如果值为空 
                if (txtInput.value == "")
                 {
                     divContent.style.display='none'; 
                    return;
                 } 
                //恢复下拉选择项为 -1 
                 currentIndex = -1; 

                //开始请求
                 requestObj = new ActiveXObject("Microsoft.XMLHTTP");
                 requestObj.onreadystatechange = displayResult;
                 requestObj.open("POST", "AutoComplete.aspx?ts=" + new Date().toLocaleString(), true);
                 requestObj.send(txtInput.value); 
             } 
         } 
        
        //显示结果 
        function displayResult()
         {
             if (requestObj.readyState == 4)
              {
                      showData();
                      divContent.style.display = "";
              } 
         } 
        
        //显示服务器返回的结果 ,并形成下拉表
        function showData()
         {
             //获取数据 
             var doc = new ActiveXObject("MSXML2.DOMDocument.3.0");
              doc.loadXML(requestObj.responseText);
             
             //显示数据的xslt 
             var docStyle = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
              docStyle.async = false; 
              docStyle.load("list.xslt");
              
             var docTemplate = new ActiveXObject("MSXML2.XSLTemplate");
              docTemplate.stylesheet = docStyle;
             
             //通过xslt转换xml数据 
             var processor = docTemplate.createProcessor();
              processor.input = doc;
              processor.transform();
             var res = processor.output;
             
             //显示转后后的结果
              divContent.innerHTML = res; 
         } 
        
        //通过键盘选择下拉项 
        function selItemByKey()
         {
            //下拉表 
            var tbl = document.getElementById("tblContent"); 
            if (!tbl)
             {
                return; 
             } 
            //下拉表的项数
            var maxRow = tbl.rows.length; 
            //向上 
            if (event.keyCode == 38 && currentIndex > 0)
             {
                  currentIndex--;
             } 
            //向下 
            else if (event.keyCode == 40 && currentIndex < maxRow-1)
             {
                  currentIndex++;
             }
            //回车 
            else if (event.keyCode == 13)
             {
                 selValue();
                return;
             } 
            
             clearColor();
             txtInput.value = tbl.rows[currentIndex].innerText; 
            //设置当前项背景颜色为blue 标记选中 
             tbl.rows[currentIndex].style.backgroundColor = "InfoBackground"; 
         } 
        
        //清除下拉项的背景颜色 
        function clearColor()
         {
             var tbl = document.getElementById("tblContent");
             for (var i = 0; i < tbl.rows.length; i++)
              {
                     tbl.rows[i].style.backgroundColor = ""; 
              } 
         } 
        
        //选择下拉表中当前项的值 ,用于按回车或鼠标单击选中当前项的值
        function selValue()
         {
            if (event.keyCode != 13)
             { 
                var text = event.srcElement.innerText;
                 txtInput.value = text; 
             } 
             initList(); 
         } 
        
        //文本框失去焦点时 设置下拉表可见性 
        function setDisplay()
         {
            //获取当前活动td的表格 
            if (document.activeElement.tagName == "TD")
             {
                 var tbl = document.activeElement.parentElement.parentElement.parentElement; 
                //如果不是下拉表,则隐藏 下拉表 
                if (tbl.id != "tblContent")
                 {
                     initList();
                 }
                return;
             } 
            
             initList();
            
         } 
       
        function initList()
         {
             divContent.style.display='none'; 
             divContent.innerHTML = "";
             currentIndex = -1;
         } 
     </script>
</head>
<body onload="initPar()">
CompanyName<input type="text" id="txtCompanyName" onkeyup="autoComplete()" onblur="setDisplay();" style="width:400px"/>
<!-- 显示下拉表的div-->
<div id="divContent" style="display:none; position:absolute; ">
</div>
</body>
</html>


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AutoComplete.aspx.cs" Inherits="AJAXBaseHome.AutoComplete" %>

AutoComplete.aspx.cs

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.IO;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Configuration;

namespace AJAXBaseHome
{
    public partial class AutoComplete : System.Web.UI.Page
     {
        private static string conString = WebConfigurationManager.ConnectionStrings["myData"].ConnectionString;

        protected void Page_Load(object sender, EventArgs e)
         {
            string input = GetInput();
             Response.Write(GetCompanyName(input));
         }

        //获取输入的字符串
        private string GetInput()
         {
             Stream s = Request.InputStream;
            int count = 0;
            byte[] buffer = new byte[1024];
             StringBuilder builder = new StringBuilder();
            while ((count = s.Read(buffer, 0, 1024)) > 0)
             {
                 builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
             }

            return builder.ToString();
         }

        private string GetCompanyName(string input)
         {
            using (SqlConnection con = new SqlConnection(conString))
             {
                 SqlCommand command = new SqlCommand("select * from suppliers where CompanyName like @Name", con);
                 command.Parameters.Add(new SqlParameter("@name", input + "%"));
                 SqlDataAdapter adapter = new SqlDataAdapter(command);
                 DataSet ds = new DataSet();
                 adapter.Fill(ds);
                return ds.GetXml();
             }
         }
     }
}


<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="NewDataSet">
    <table id="tblContent" style="background-color:GrayText">
    <xsl:for-each select="Table">
      <tr>
        <!--td中单击时选择当前值, 鼠标在上时更改行背景颜色,鼠标离开后清除背景颜色-->
        <td onclick="selValue()" style="cursor:hand" onmouseover="clearColor();this.parentElement.style.backgroundColor='InfoBackground'" onmouseout="clearColor()">
          <xsl:value-of select="CompanyName"/>
        </td>
      </tr>
    </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>
分享到:
评论

相关推荐

    AJAX实现google输入自动完成简单模拟.doc

    用AJAX实现google输入自动完成的简单模拟.doc

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    AjaxCallerSchedul 使用AjaxCaller实现简单的定时任务 RicoColor 使用Open Rico实现动态调色板 RicoDrag 使用Open Rico实现可拖拽的层 WebSitetestdojo 使用dojo组件实现卷帘效果的div隐藏...

    Ajax 模仿google百度提示输入框 v1.8

    Ajax模仿google提示输入框 使用说明 v1.8 本程序由飞飞asp乐园编写 ************************************************* 特别感谢: 一杯白开水 网友 的帮助 版本所提的修改建议 *********************************...

    超实用的jQuery代码段

    第5章 jQuery实现用户输入自动完成功能 5.1 最简单的用户输入自动完成 5.2 使用远程数据源的自动完成 5.3 带缓存的自动完成 5.4 带滚动条的自动完成 5.5 Combobox风格的自动完成 5.6 读取XML数据的自动完成 5.7 多维...

    Ajax模仿google提示输入框 v1.8

    7.模拟下拉框不会被select遮挡 8.调用更方便(内核已改为jq插件) 9.皮肤修改方便 ,外置的css样式文件,带有注释说明,任意修改 10.支持键盘方向键按住不放选择 11.解决了延时卡死的现象 12.解决了在有滚动条时,ie...

    JAVA上百实例源码以及开源项目

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...

    JQuery&CSS;&CSS;+DIV实例大全.rar

    9.jquery仿google首页图标动画菜单效果实现模拟鼠标动画菜单的代码 10.jquery仿卓越亚马逊网鼠标移到按钮弹出菜单的效果代码 11.jquery浮动变化的个性菜单插件floatmenu下载 12.jQuery黑色风格仿Flash版下滑...

    Google Android SDK开发范例大全(第3版) 4/5

    完备的Google网络服务:Google语音搜寻、Google远程账号登录、Google Search API、Google Chart API、Google Picasa手机相册、Google Translate API整合等。 Google Map应用:GPS定位、规划导航路径、GPS Google地图...

    Google Android SDK开发范例大全(第3版) 3/5

    完备的Google网络服务:Google语音搜寻、Google远程账号登录、Google Search API、Google Chart API、Google Picasa手机相册、Google Translate API整合等。 Google Map应用:GPS定位、规划导航路径、GPS Google地图...

    Google Android SDK开发范例大全(第3版) 5/5

    完备的Google网络服务:Google语音搜寻、Google远程账号登录、Google Search API、Google Chart API、Google Picasa手机相册、Google Translate API整合等。 Google Map应用:GPS定位、规划导航路径、GPS Google地图...

    JAVA上百实例源码以及开源项目源代码

    简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 ...

    飞飞Ajax模仿google提示输入框源码 v1.7

    飞飞Ajax模仿google提示输入框 使用说明 v1.7本程序由飞飞asp乐园编写*************************************************特别感谢: 一杯白开水 网友 的帮助 版本所提的修改建议**********************************...

    Google Android SDK开发范例大全(第3版) 1/5

    完备的Google网络服务:Google语音搜寻、Google远程账号登录、Google Search API、Google Chart API、Google Picasa手机相册、Google Translate API整合等。 Google Map应用:GPS定位、规划导航路径、GPS Google地图...

    精通CSS+DIV网页样式与布局

     3.2 文字实例一:模拟Google公司Logo   3.3 文字实例二:制作页面的五彩标题   3.4 CSS段落文字  3.5 段落实例:百度搜索   第4章 用CSS设置图片效果   4.1 图片样式   4.2 图片的对齐  4.3 ...

    《精通CSS+DIV网页样式与布局》光盘源码

     3.2 文字实例一:模拟Google公司Logo   3.3 文字实例二:制作页面的五彩标题   3.4 CSS段落文字  3.5 段落实例:百度搜索   第4章 用CSS设置图片效果   4.1 图片样式   4.2 图片的对齐  4.3 ...

    精通CSS.DIV.网页样式与布局 源码

     3.2 文字实例一:模拟Google公司Logo   3.3 文字实例二:制作页面的五彩标题   3.4 CSS段落文字  3.5 段落实例:百度搜索   第4章 用CSS设置图片效果   4.1 图片样式   4.2 图片的对齐 ...

    精通CSS+DIV网页样式与布局Part1

     3.2 文字实例一:模拟Google公司Logo   3.3 文字实例二:制作页面的五彩标题   3.4 CSS段落文字  3.5 段落实例:百度搜索   第4章 用CSS设置图片效果   4.1 图片样式   4.2 图片的对齐  4.3 ...

Global site tag (gtag.js) - Google Analytics