Программирование > JavaScript & JScript

Поле ввода в форму как поле ввода адреса в броузере - с автоподстановкой

<< < (4/4)

Veosys:
virka
Подойдет, а что таки есть готовое решение? Было бы очень благодарен!

virka:
Немного разгребусь, и может чего-нить смогу предложить.
Решение есть, наверное, всегда, не всегда готовое.
Для ASP нужен сервер. У Вас какая ОС?

Veosys:
virka
ОС Windows XP Pro. Сервер IIS. Так что с ASP никаких проблем.

virka:
Обещанного 3 года ждут, немного появилось времени, привожу код.
Теоретически все просто, как здесь уже и писали.
1.Формируется массив со значениями из базы данных.
2.Потом он сверяется с набираемой строкой, формируя массив для вывода в окно.
Для первого я использую ASP (PHP просто не знаю), делаете это любым из известных Вам способов. В моем случае это выглядит так:

#


#

Дальше все значения серверного объекта переносятся в клиентский массив

#


автоподстановка


var WT= new Array();
var count1=0;

WT[count1]=\'\';
count1++;

#

На этом серверная часть заканчивается.
Второй этап чисто клиентский.
Массив WT сверяется с набираемой строкой, формируя массив для вывода в окно.
В данном случае сверка жестко закреплена с именем поля (txtpole) и формы (form1), Вы делайте, как Вам удобно.
Функция formlist(), осуществляющая сверку, привязана к событию document.onkeyup
Вывод в окно осуществляется любым из известных Вам способов.
В данном случае вывод производится в элемент

#
// глобальные переменные

var boolflag=false;// включение/выкл

//

//создаем функцию формирования массива значений, соответствующих набранным символам из общего массива WT
function formlist()
{
tpv=form1.txtpole.value;
var RT=new Array();
if(tpv.length>0)// проверка на наличие символов в поле text
   {
var count2=0;
var buf;
for(n=0;n0)?boolflag=true:boolflag=false;// если не найдено совпадающих значений, boolflag=false

return RT;
}

//функция cоздания списка автозаполнения и размещения его по адресу id=testid; вызов goontheplace()
function createlist(ar)
{
var str1="";
var topdiv=-1400;
var widthdiv=form1.txtpole.offsetWidth;
if(boolflag)
   {
   str1=\'\'+ar.join("
")+\'\';
   topdiv=-3;
   }
testid.innerHTML=str1;
goontheplace(widthdiv,topdiv);
}

//функция, отвечающая за ширину и координату y элемента автозаполнения testid
function goontheplace(w,y)
{
testid.style.width=w;
testid.style.top=y;
}

//функция размещения выбранного текста в поле text и удаления из поля видимости testid
function textgo(a)
{
form1.txtpole.value=a.name;
goontheplace(0,-1400);
}

//функция смены стилевых элементов текушего объекта
function colorline(a)
{
a.style.backgroundColor="#000066";
a.style.color="#ffffff";
}

//функция возврата стилевых элементов текушего объекта
function colorline_off(a)
{
a.style.backgroundColor="";
a.style.color="";
}

//функция запуска, привязана к событию onkeyup документа
function initar()
{
createlist(formlist());
}

document.onkeyup=initar;


#

Само тело документа:

#




.




#

Стили я не определял, хотя так сделать будет, конечно, удобнее.
В данном случае я рассмотрел только подстановку с помощью мышки, события клавиатуры (стрелочки и enter) остались в стороне, просто нет времени, разберетесь сами.
Я все это привожу только в плане идеи, результат действительно может не стоить труда, да и готовые сценарии предлагать - дело неблагодарное. Надеюсь, цели Ваши были именно понять, а не просто применить (иначе Вам надо было поместить свою тему в поиске скрипта). Приведенный мной код вполне рабочий в среде Windows Server IIS5+ и IE5+ в интернете и в интранете, но от конкретных условий может дорабатываться. Например, при большом количестве сверяемых значений можно разбить исходный массив на субмассивы по алфавиту и т.п.
Да, еще, документ должен иметь расширение .asp и должны быть правильно настроены IIS и ODBE.
База данных у меня Acces, для MySQL все тоже должно работать, но возможно есть некие нюансы, правда, по идее, они должны касаться только подключения к базе данных, на сам код это влиять не должно. Напишите, получилось у Вас чего-нибуть или нет.
Кстати, XP теперь содержит IIS? В первых версиях с ним были проблеммы, я из-за этого вернулся на 2000.

Навигация

[0] Главная страница сообщений

[*] Предыдущая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии