<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-3  評論-26  文章-41  trackbacks-0

    比較簡單的模擬,文本框輸入CompanyName,然后
    搜索SqlServer2000 里NorthWind數據庫 Suppliers表的CompanyName字段,
    然后實現自動完成

    四個文件
    1 .AutoComplete.htm

     <!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>


    AutoComplete.aspx

    <%@ 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();
                }
            }
        }
    }

     

    xslt文件 用于顯示xml數據

    <?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>


    http://www.vs2005.com/Ajax/427/2/default.aspx

    posted on 2007-10-05 23:01 百年 閱讀(279) 評論(0)  編輯  收藏 所屬分類: .net
    主站蜘蛛池模板: 人妻无码一区二区三区免费 | 青青青国产色视频在线观看国产亚洲欧洲国产综合| 亚洲熟妇av一区二区三区| 国产精品亚洲AV三区| 免费看片A级毛片免费看| 亚洲毛片基地4455ww| 毛片免费全部免费观看| 亚洲av无码片区一区二区三区| 久章草在线精品视频免费观看| 国产亚洲免费的视频看| a级成人毛片免费图片| 久久国产精品亚洲综合| 亚洲一区免费观看| 亚洲精品免费在线| 成人片黄网站色大片免费| 亚洲色大网站WWW永久网站| 免费理论片51人人看电影| 午夜在线亚洲男人午在线| 亚洲国产精品人人做人人爽| 国产JIZZ中国JIZZ免费看| 久久精品国产亚洲av麻豆| 亚洲一区在线免费观看| 亚洲 日韩经典 中文字幕| 国产一区二区三区在线观看免费| 另类专区另类专区亚洲| 亚洲成AV人片在线观看ww| 精品福利一区二区三区免费视频| 亚洲人配人种jizz| 亚洲成av人在片观看| 国精产品一区一区三区免费视频| 久久久久亚洲AV无码专区体验| 黄页网站在线看免费| 国产精品国产亚洲区艳妇糸列短篇 | 久久久久久精品免费看SSS | 911精品国产亚洲日本美国韩国| 四虎在线视频免费观看视频| 日韩欧美亚洲中文乱码| 亚洲中文字幕久久精品无码喷水| 最刺激黄a大片免费网站| 亚洲av色香蕉一区二区三区| 国产国拍精品亚洲AV片|