создание web сайтов качественно! Бизнес сайт. оптимизация! дизайн сайта... Cоздание сайтов различной сложности: Бизнес сайт... ИТ аутсорсинг: веб решения. разработка бизнес сайта. корпоративный сайт... C#, Microsoft SQL Server 2005! стильный сайт; веб-дизайн, разработка сайтов! ASP.NET... создание сайта: цена web-сайта! outsourcing... Разработка! создание web сайтов дешево, цена и стоимость сайта сайты дешево. , Cоздание сайтов дешево! создание продвижение сайтов! создание web сайтов красиво ASP. заказать сайт. ... web-дизайн Cоздание сайтов быстро. . Cоздание сайтов. MSSQL... концепция дизайна! раскрутка сайта. создание web сайтов быстро; Аутсорсинг it outsourcing. . цена сайта... Cоздание сайтов красиво! Самые маленькие цены и сроки реализации сайтов: создание сайта. Оптимизация, продвижение сайтов! Разработка сайта, Цена веб-сайта! заказ сайта... сайт недорого, цена бизнес сайта; разработка сайта! web дизайн студия: разработка web-дизайна! стоимость сайта: .NET... изготовление сайтов. Cоздание сайта Cоздание сайтов качественно. ; разработка сайта. продвижение сайта! создание бизнес сайта Создать сайт.
|
|
|
AJAX - подстановка слов в текстовое поле |
/ / /
|
|
Данная статья посвящена созданию возможности подстановки слов в текстовое поле. Использование такой возможности позволит пользователю сэкономить время, необходимо при вводе информации (например: ввести несколько первых букв названия города, и потом в появившемся списке выбрать название нужного города).
Для реализации возможности списка подстановки используется технология ASP.NET 2.0.
Первое, что необходимо – это создать проект веб-приложения. Для этого в Visual Studio 2005 выберите в меню пункт File\New\Web Site. В появившемся окне выберите заготовку ASP.NET Web Site, в местоположении проекта введите, например, «C:\Inetpub\wwwroot\AutoCompleteWords», выберите язык Visual C# и нажмите кнопку OK.
Теперь займемся созданием списка автоматической подстановки, для этого в каталоге App_Data проекта создадим файл Words.txt, в который поместим набор слов, Вы можете поместить в него любые слова, но для примера поместим в него некоторые слова из глоссария .NET SDK:
access control list (ACL)
ADO.NET
aggregate event
alpha channel
anchoring
antialiasing
application base
application domain (AppDomain)
application manifest
application state
ASP.NET
ASP.NET application services database
ASP.NET mobile controls
ASP.NET mobile Web Forms
ASP.NET page
ASP.NET server control
ASP.NET Web application
assembly
assembly cache
assembly manifest
assembly metadata
assertion (Assert)
association class
ASSOCIATORS OF
asynchronous method
attribute
authentication
authorization
autopostback
После создания файла, содержащего слов для подстановки, создадим саму веб-форму, которая будет содержать текстовое поле с возможностью подстановки. Для этого в файл Default.aspx, который содержится в созданном проекте, поместим следующий код:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="AutoComplete" %>
<!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 id="Head1" runat="server">
<title>Текствое поле с подстановкой</title>
<script type="text/javascript">
function TextKeyDown(WhoSend,WhoGet) //Обработка нажатий кнопок
{
var e=event;
if(e.keyCode==13)
{
e.returnValue =false;
return false;
}
else if(e.keyCode==27)
{
document.getElementById(WhoGet).style.display='none'
e.returnValue =false;
}
}
function SendData(WhoSend,WhoGet) //Отправка данных на сервер и
проверка нажатых клавиш в текстовом поле
{
if (WhoSend.value.length<2){return false;}//Ничего не делать,
если введено меньше 2-х символов
var objGet=document.getElementById(WhoGet);
var e=event;
if (e.keyCode==40) //Нажата стрелка вниз
{
if (objGet.selectedIndex<objGet.options.length-1)
objGet.selectedIndex++;
else
objGet.selectedIndex=0;
return false;
}else if (e.keyCode==38) //Нажата стрелка вверх
{
if (objGet.selectedIndex>0)
objGet.selectedIndex--;
else
objGet.selectedIndex=objGet.options.length-1;
return false;
}else if (e.keyCode==13) //Нажат ввод
{
ReturnValueToTextBoxs(objGet,WhoSend)
return false;
}else if (e.keyCode==27) //Нажат Escape
{
objGet.style.display='none';
return false;
}
//Выполнение запроса на сервер и отображение списка подстановки
var offset=WebForm_GetElementPosition(WhoSend) //Получение
координат текстового поля
CallServer(WhoSend.value,WhoGet); //Запрос на сервер
objGet.style.top =offset.y+WhoSend.offsetHeight+'px';
objGet.style.left =offset.x+'px';
objGet.style.width =offset.width+'px';
objGet.style.display='block'; //Отображение списка на экране
}
function ReceiveServerData(args, context) //Поучение данных с сервера
{
if (args.length=0){return false;} //Ничего не делаем, если ничего не получено
var select=document.getElementById(context)
var mass=args.split("\t"); //Превращаем строку в массив
for (var i=select.length-1;i>-1;i--) //Очищаем список
select.options[i]=null;
for (var i=0;i<mass.length-1;i++)
{
select.options[i]=new Option(mass[i]); //Заполняем список
}
if (i!=0)
select.size=i+1; //Выставляем размер с списка
}
function ReturnValueToTextBoxs(SelectObj,TextObj)//Заполняем текстовое поле
{
TextObj.value=SelectObj.options[SelectObj.selectedIndex].text;
TextObj.focus();
SelectObj.style.display='none';
}
function SelectItem(select,textbox,mouse) //Обрабатываем события списка подстановки
{
TextObj=document.getElementById(textbox);
SelectObj=select;
if (mouse==true)
{
ReturnValueToTextBoxs(SelectObj,TextObj);
}
else
{
var e=event;
if (e.keyCode==13)
{
ReturnValueToTextBoxs(SelectObj,TextObj);
}
else if(e.keyCode==27)
{
TextObj.focus();
SelectObj.style.display='none';
}
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" Width="477px"
AutoCompleteType="Disabled"></asp:TextBox>
<asp:ListBox ID="Select1" runat="server" Style="position:
absolute; display: none;">
</asp:ListBox>
</div>
</form>
</body>
</html>
А в файл Default.aspx.cs поместим исходный код обработчика событий веб-формы:
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.IO;
public partial class AutoComplete : System.Web.UI.Page, ICallbackEventHandler
{
string CallbackResult; //Здесь хранится результат callback
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
RegisterClientScript();
TextBox1.Attributes.Add("onkeyup",
String.Format("SendData(this,'{0}');", Select1.ClientID)); //Подключаем
обработчик нажатия клавиш
TextBox1.Attributes.Add("onkeydown",
String.Format("TextKeyDown(this,'{0}',event)", Select1.ClientID));
//Обработка нажатия клавиш
Select1.Attributes.Add("onkeydown",
String.Format("SelectItem(this,'{0}',false);", TextBox1.ClientID));
//Событие списка
Select1.Attributes.Add("ondblclick",
String.Format("SelectItem(this,'{0}',true);", TextBox1.ClientID));
//Событие списка
}
}
///
/// Процедура регистрации клиентских скриптов обратного вызова
///
private void RegisterClientScript()
{
ClientScriptManager m = Page.ClientScript;
string cbReference = m.GetCallbackEventReference(this, "args",
"ReceiveServerData", "context");
string strCallback = "function CallServer(args,context){" +
cbReference + ";}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
"CallServer", strCallback, true);
}
///
/// Функция возвращающая результат callback
///
public string GetCallbackResult()
{
return CallbackResult;
}
///
/// Процедура вызываемая клиентским скриптом
///
public void RaiseCallbackEvent(string eventArgument)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
FileStream file = new
FileStream(Server.MapPath("~/App_Data/words.txt"), FileMode.Open,
FileAccess.Read);
StreamReader reader = new StreamReader(file);
String word;
while ((word = reader.ReadLine()) != null)
{
if (word.Length >= eventArgument.Length)
if (eventArgument.ToLower() == word.Substring(0,
eventArgument.Length).ToLower())
{
sb = sb.Append(word);
sb = sb.Append("\t");
}
}
file.Close();
CallbackResult = sb.ToString();
}
}
Теперь запустим проект на выполнение. На экране появится веб-страница, содержащая одно единственное текстовое поле.
Введем в него слово as, после этого экран должен принять примерно такой вид:
Для того, чтобы перейти на какое-нибудь слово из списка подстановки, нажимаем стрелку вниз на клавиатуре. Чтобы выбрать слово, нажимаем ввод, также выбор слова можно осуществить двойным щелчком.
|
|
|
|
Пишите:
|
сайт недорого, заказать сайт; it outsourcing: изготовление сайтов! Аутсорсинг. Оптимизация, продвижение сайтов; создание сайта: создание продвижение сайтов: веб решения! создание web сайтов быстро, цена сайта; web-дизайн, цена и стоимость сайта Cоздание сайтов. сайты дешево. , Cоздание сайта! Разработка: разработка сайта стоимость сайта. , стильный сайт. дизайн сайта... Cоздание сайтов качественно... создание бизнес сайта outsourcing. : Разработка сайта: продвижение сайта: оптимизация... разработка бизнес сайта, .NET, веб-дизайн, разработка сайтов... C#. цена web-сайта ASP. Бизнес сайт. ; Cоздание сайтов быстро: создание сайта; заказ сайта: Cоздание сайтов дешево; ASP.NET. создание web сайтов качественно... создание web сайтов красиво... Microsoft SQL Server 2005: цена бизнес сайта! Цена веб-сайта: раскрутка сайта. Самые маленькие цены и сроки реализации сайтов MSSQL. ... ИТ аутсорсинг Бизнес сайт. . Cоздание сайтов различной сложности! создание web сайтов дешево... Cоздание сайтов красиво: концепция дизайна; web дизайн студия... разработка сайта, Создать сайт! корпоративный сайт; разработка web-дизайна
концепция дизайна. ... Microsoft SQL Server 2005 web дизайн студия. : ASP.NET! разработка сайта! Аутсорсинг outsourcing. , цена сайта, .NET: создание сайта. продвижение сайта; Cоздание сайтов качественно, Бизнес сайт, создание web сайтов дешево! создание web сайтов быстро MSSQL. : Разработка! Создать сайт, разработка web-дизайна... раскрутка сайта; Cоздание сайтов дешево, корпоративный сайт, ИТ аутсорсинг, заказать сайт! Cоздание сайтов; создание web сайтов качественно, it outsourcing создание продвижение сайтов. ! веб-дизайн, разработка сайтов! цена бизнес сайта: Самые маленькие цены и сроки реализации сайтов создание сайта. ; создание web сайтов красиво. сайт недорого, стильный сайт! ASP, Cоздание сайтов быстро, Cоздание сайта; Разработка сайта. Оптимизация, продвижение сайтов Cоздание сайтов красиво. . изготовление сайтов: разработка бизнес сайта, стоимость сайта! Цена веб-сайта, цена и стоимость сайта веб решения. . дизайн сайта создание бизнес сайта. , сайты дешево. Бизнес сайт цена web-сайта. ; Cоздание сайтов различной сложности! заказ сайта, web-дизайн оптимизация. ... разработка сайта... C# |