Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 01:34 06.07.25 
Клубове/ Компютри и Интернет / PHP Пълен преглед*
Информация за клуба
Тема Re: бързо търсене в текстово поле [re: putnik]
Автор croesus (?!?)
Публикувано12.02.09 19:56  



Не е толкова лесно, както изглежда, даже да призная (понеже съм го правил няколко пъти) си е направо кошмар ако полетата са повече от 1. Използва се AJAX. Първо в полето на събитието "onkeyup" (точно това, а не onkeydown onkeypress) закачаш функция, която трябва да изглежда по подобен начин:


if (!httpReq)
{
httpReq = createRequestObject ();
}

httpReq.open("GET", "receiver.php?req=hint&qry=" + txtField, true);
httpReq.onreadystatechange = loadHint;
httpReq.send(null);


Където createRequestObject () ти е създало HTTPRequest. Тук няма да прилагам код, защото читавия който работи на разнообразни браузъри е доста обемен.

След това във въпросния receiver.php файл си правиш заявка към MySQL базата и резултата връщаш например в този вид:

hint1||hint2||hint3||hint4 Аз ползвам обикновено разделители "||", но ти ако искаш ползвай други или връщай като XML резултата.

След това върнатия резултат се обработва от javascript:

function loadHint ()
{
if (checkReadyState (httpReq))
{
if (httpReq.responseText)
{
var hintUl = document.getElementById ("ulHint_" + hintId);
var tmpLi;
txtHints = httpReq.responseText.split ("||");
//alert (txtHints.length);
for (var i = 0;i < txtHints.length;i++)
{
tmpLi = document.createElement ("LI");
tmpLi.innerHTML = txtHints[i ] ;
tmpLi.className = "cHintVisible";
try
{
tmpLi.addEventListener("click", useHint, false);
}
catch (e)
{
tmpLi.attachEvent("onclick", useHint);
}
hintUl.appendChild (tmpLi);
}
hintUl.style.zIndex = 2;
}
}
}


С две думи: под полето имам сложен един UL, с един единствен LI на който е зададено display:none.
След като върнатия резултат е сплитнат в редица горната функция създава на всеки член по един UL елемент и го прави видим.

Дотук с показването.

Оттук насетне имаш функцията useHint, която "използва" подсказките - като кликнеш на някоя от тях другите изчезват а съдържанието на полето става като нея. После - за да е читаво подсказването трябва ако юзъра излезе от полето без да е избрал някоя от подсказките те да се скриват. Тук вече навлизам в тъмните дебри на умопомрачителния Javascript защото аз съм решил проблемите оттук на сетне с setInterval и clearInterval, но за тяхната читавост не мога да гарантирам.

В общи линии въпросния проблем си е доста сложен и изисква доста напъване с php, javascript, css и даже html.

Късмет



Цялата тема
ТемаАвторПубликувано
* бързо търсене в текстово поле putnik   10.02.09 10:17
. * Re: бързо търсене в текстово поле croesus   12.02.09 19:56
. * Re: бързо търсене в текстово поле putnik   12.02.09 21:15
. * Re: бързо търсене в текстово поле Viper X   15.02.09 20:52
. * Много ти благодаря putnik   19.02.09 00:04
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.