Сегодня попробуем сами написать скрипт для автозаполнения поисковых форм, например как в Google или Википедии. По моему довольно удобная функция. И, как оказалось, довольно проста в реализации. Ну что же, приступим!
Система простая: при вводе в поле символа – отправляем с помощью ajax`а запрос. В серверной части обрабатываем его и выдаём. В нашем примере сделаем простой поиск по именам. Для начала создадим саму поисковую форму:
Теперь по порядку. Мы имеем простую формочку, состоящую из текстового поля и кнопки. Сразу под ним – блок, где мы будем выводить результаты. Ширину, рамку и остальное меняем в классе searchbar. Класс asearch – это уже само оформления вариантов подсказки (подробнее будет дальше).
Так, с формочкой вроде разобрались. Теперь разберём что у нас будет в autosearch.js.
Тут всё просто. Функция sendRequest – служит для отправки запроса, getRequest – получение данных. m_over меняет внешний вид варианта подсказки при наведении курсора, m_out – при уходе курсора с объекта. m_change – при клике на подсказку вставляет текст в поле и исчезает (тут к примеру можно поставить после клика начинать поиск).
В функции ajaxSend я поставил ограничение на клавиши, чтобы избежать отправки запросов при нажатии на Shift, Ctrl и другие не символьные клавиши.
Запросы мы будем отправлять в файл request.php. Так как у IE ajax-запросы отправляются в win-1251 кодировке (а не utf-8, как у всех остальных браузеров) мы кодируем текст на кириллице с помощью функции encodeURIComponent(). Я на этом моменте долго помучался, пока разобрался =)
Ну, а теперь серверная часть нашего скрипта. Тут уже каждый может менять код под свои нужды, усовершенствовать и дополнять его.
<br />
<?php<br /> header("Content-type: text/plain; charset=utf-8");<br /> $s = mysql_real_escape_string(substr(trim($_GET['s']),0,50));<br /> if(!empty($s)){<br /> mysql_connect('localhost','root','');<br /> mysql_select_db('test');<br /> mysql_query("SET NAMES utf8");<br /> $res = mysql_query("SELECT name FROM names WHERE name LIKE '".$s."%' ORDER BY name ASC LIMIT 7");<br /> while($row = mysql_fetch_array($res)){<br />
?></p>
<div class="asearch" onMouseOver="m_over(this)" onMouseOut="m_out(this)" onClick="m_change('<?=$row['name'];?>')"><br /> <?=$row['name'];?>
</div>
<p><?php }} ?><br />
В итоге серверная часть скрипта должна выдать что-то вроде этого: