JS 自动完成 AutoComplete(Ajax 查询)_Javascript教程-查字典教程网
JS 自动完成 AutoComplete(Ajax 查询)
JS 自动完成 AutoComplete(Ajax 查询)
发布时间:2016-12-30 来源:查字典编辑
摘要:一:JS部分复制代码代码如下://*****************************************************...

一:JS 部分

复制代码 代码如下:

//********************************************************

//创建日期: 2009-03-10

//作 者: oloen

//內容说明:自动完成JS类

//用法:

// var auto = new autoComplete(客户端ID);

// auto.Init(document.all.客户端ID);

// auto.Type = 'PSUnit' //PSSale

//********************************************************

//自动完成

function autoComplete(id)

{

var me = this;

//自动完成绑定控件客户端ID

me.AutoCompleteControlID

me.handle = null

me.DivResult ;

me.currentIndex = -1;

me.LastIndex = -1;

me.requestObj;

me.CurrentTD = '';

me.Filter = '1=1';

me.Type = 'PSUnit'

if(id != null && typeof(id) != undefined)

me.AutoCompleteControlID = id;

if(me.DivResult == null||typeof(me.DivResult)=="undefined")

{

me.DivResult = document.createElement("div");

var parent = document.getElementById(me.AutoCompleteControlID).parentElement;

if(typeof(parent)!="undefined"){

parent.appendChild(me.DivResult);

}

}

this.Init = function(obj)

{

me.handle = obj

me.AutoCompleteControlID = obj.id

}

this.Auto = function()

{

me.DivResult.style.position = "absolute";

me.DivResult.style.top = me.handle.getBoundingClientRect().top - 11;

me.DivResult.style.left = me.handle.getBoundingClientRect().left;

me.DivResult.style.width = me.handle.width;

me.DivResult.style.height = 20;

me.DivResult.style.backgroundColor = "#ffffff";

//如果按下 向上, 向下 或 回车

if (event.keyCode == 38 || event.keyCode == 40 || event.keyCode == 13)

{

me.SelectItem();

}

else

{

//恢复下拉选择项为 -1

currentIndex = -1;

if(window.XMLHttpRequest)

{

me.requestObj = new XMLHttpRequest();

if(me.requestObj.overrideMimeType)

me.requestObj.overrideMimeType("text/xml");

}

else if(window.ActiveXObject)

{

try

{

me.requestObj = new ActiveXObject("Msxml2.XMLHTTP");

}

catch(e)

{

me.requestObj = new ActiveXObject("Microsoft.XMLHTTP");

}

}

if(me.requestObj == null)

return;

me.requestObj.onreadystatechange = me.ShowResult;

me.requestObj.open("GET", "../Common/AutoComplete.aspx?InputValue=" + escape(me.handle.value) + "&Filter=" + me.Filter + "&Type=" + me.Type, true);

me.requestObj.send();

}

}

this.ShowResult = function()

{

if (me.requestObj.readyState == 4)

{

me.DivResult.innerHTML = me.requestObj.responseText;

me.DivResult.style.display = "";

}

}

this.SelectItem = function()

{

//结果

var result = document.getElementById("Tmp_AutoComplete_tblResult");

if (!result)

return;

if(result.rows[me.LastIndex] != null)

{

result.rows[me.LastIndex].style.backgroundColor = "#FFFFFF";

result.rows[me.LastIndex].style.color = "#000000";

}

var maxRow = result.rows.length;

//向上

if (event.keyCode == 38 && me.currentIndex > 0)

me.currentIndex--;

//向下

if (event.keyCode == 40 && me.currentIndex < maxRow-1)

me.currentIndex++;

//回车

if (event.keyCode == 13)

{

me.Select()

me.InitItem();

return;

}

if(result.rows[me.currentIndex]!=undefined)

{

//选中颜色

result.rows[me.currentIndex].style.backgroundColor = "#3161CE";

result.rows[me.currentIndex].style.color = "#FFFFFF";

}

me.DivResult.style.height = maxRow * 15;

me.LastIndex = me.currentIndex;

}

this.Select = function()

{

var result = document.getElementById("Tmp_AutoComplete_tblResult");

if (!result || result.rows.length<=0)

return;

//默认第一条记录

if(me.currentIndex < 0)

me.currentIndex = 0;

var ReturnValue = result.rows[me.currentIndex].ReturnValue;

if(ReturnValue != undefined)

{

me.DivResult.style.display = 'none';

//设置页面值

ReturnAutoComplete(ReturnValue);

}

}

this.Hide = function()

{

me.DivResult.style.display = 'none';

me.currentIndex = -1;

}

this.InitItem = function()

{

me.DivResult.style.display = 'none';

me.DivResult.innerHTML = "";

me.currentIndex = -1;

}

me.DivResult.onclick = function()

{

try{me.Auto();}catch(e){}

}

document.getElementById(me.AutoCompleteControlID).onclick = function(){

try{me.Auto();}catch(e){}

}

document.getElementById(me.AutoCompleteControlID).onkeyup = function(){

try{me.Auto();}catch(e){}

}

document.getElementById(me.AutoCompleteControlID).onkeydown = function(){

if (event.keyCode == 13)

{

try

{

me.Select()

me.InitItem();

}catch(e){}

}

}

document.getElementById(me.AutoCompleteControlID).onblur = function(){

me.Hide();

}

}

2 后台查询页面

复制代码 代码如下:

using System;

using System.Data;

using System.Configuration;

using System.Collections;

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.Data.SqlClient;

//********************************************************

//创建日期: 2009-03-10

//作 者: Oloen

//內容说明:自动完成后台查询页面

// Type:pssale 合同查询

// Type:psunit 房间查询

//********************************************************

/// <summary>

/// 自动完成后台查询页面

/// </summary>

public partial class Common_AutoComplete : System.Web.UI.Page

{

const string tbStyle = @"color:#F7922E""";

/// <summary>

/// 过滤条件

/// </summary>

string Filter = string.Empty;

/// <summary>

/// 查询值

/// </summary>

string InputValue = string.Empty;

/// <summary>

/// 自动完成类别

/// Type:pssale 合同查询

/// Type:psunit 房间查询

/// </summary>

string Type = string.Empty;

/// <summary>

/// 返回结果字符

/// </summary>

string ReturnStr = string.Empty;

private void Page_Load(object sender, System.EventArgs e)

{

switch (Type.ToLower())

{

case "pssale":

case "psunit":

default:

AutoPSUnitNo();

break;

}

Response.Clear();

Response.ContentType = "text/xml";

Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");

Response.Write(ReturnStr);

Response.End();

}

protected override void OnInit(EventArgs e)

{

base.OnInit(e);

Filter = Request.QueryString["Filter"] ?? "1=1";

InputValue = Request.QueryString["InputValue"] ?? "";

InputValue.Replace("'","''");

Type = Request.QueryString["Type"] ?? "";

}

/// <summary>

/// 售楼系统房间编号自动完成

/// </summary>

void AutoPSUnitNo()

{

if (!string.IsNullOrEmpty(InputValue))

{

ReturnStr = @"<table cellSpacing=""0"" cellPadding=""0"" width=""150px"" align=""center"" border=""0"" id=""Tmp_AutoComplete_tblResult""padding-left:5;padding-right:5; background-color:#FFFFFF;border:1px solid #999999;"">";

string Sql = string.Format(@"SELECT TOP 10 UnitID,UnitNo,ProjectNo,PhaseNo,BlockNo FROM View_PS_Unit WHERE UnitNo LIKE '%{0}%' AND {1}", InputValue, Filter);

if (Type.ToLower().Equals("pssale"))

Sql = string.Format(@"SELECT TOP 10 SaleID,UnitID,UnitNo,ContractNo,Name,SaleDate,SellingPrice,ProjectNo FROM View_PS_Sale_Unit WHERE UnitNo LIKE '%{0}%' AND {1}", InputValue, Filter);

using (SqlDataReader sdr = DataAccessHelper.ExecuteReader(Sql) as SqlDataReader)

{

if (sdr == null || !sdr.HasRows)

{

ReturnStr = string.Empty;

return;

}

while (sdr.Read())

{

string td = string.Format(@"<td height=""15"" nowrap>{0}</td>", sdr["ProjectNo"].ToString());

//td += string.Format(@"<td height=""15"" nowrap>{0}</td>", sdr["PhaseNo"].ToString());

//td += string.Format(@"<td height=""15"" nowrap>{0}</td>", sdr["BlockNo"].ToString());

td += string.Format(@"<td height=""15"" nowrap align=""right"" {1}>{0}</td>", sdr["UnitNo"].ToString(), tbStyle);

if (Type.ToLower().Equals("pssale"))

{

ReturnStr += string.Format(@"<tr ReturnValue=""{0},{1},{2},{3},{4},{5},{6}"">{7}</tr>",

sdr["SaleID"].ToString(), sdr["UnitID"].ToString(),

sdr["UnitNo"].ToString(), sdr["ContractNo"].ToString(),

sdr["Name"].ToString(), sdr["SaleDate"].ToString(),

sdr["SellingPrice"].ToString(), td);

}

else

ReturnStr += string.Format(@"<tr ReturnValue=""{0},{1}"">{2}</tr>", sdr["UnitID"].ToString(), sdr["UnitNo"].ToString(), td);

}

}

ReturnStr += @"</table>";

}

}

}

3 调用部分

复制代码 代码如下:

<!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=gb-2312" />

<script type="text/javascript" src="../JS/AutoComplete.js"></script>

<title>无标题 1</title>

</head>

<body>

<input id="t1" type="text">

<script>

var auto = new autoComplete('t1')

auto.Init(document.all.t1);

//选中后做的事情

function ReturnAutoComplete(ReturnValue)

{

alert(ReturnValue)

}

</script>

</body>

</html>

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类