|
Тема |
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.
Късмет
|
| |
|
|
|