Автозаполнение формы с помощью jQuery
Доброго времени суток. В данной статье я покажу Вам как реализовать автозаполнение формы с помощью jQuery.
На примере мы будем использовать список городов России. Пользователь начинает вводить название города, а скрипт подставляет название города, который он начал вводить.
Для начала подключаем в head jQuery v1.7.2, далее непосредственно сам скрипт jquery.autocomplete.js и css (ссылка в конце статьи)
<link rel="stylesheet" type="text/css" href="style.css" />
<script src="jquery.js"></script>
<script type="text/javascript" src="jquery.autocomplete.js"></script>
После того как подключили, необходимо ввести список городов(это короткий список)
<script>
$(document).ready(function(){
// --- Автозаполнение ---
$("#city_from,#city_to").autocompleteArray([
' Братиславская,ул., д.22',
'1-й Курьяновский проезд',
'Абакан',
'Азамар',
'Актау',
'Актобе',
'Алдан',
....
'Томск',
'Трехгорный',
'Туапсе',
'Тула',],
{
delay:10,
minChars:1,
matchSubset:1,
autoFill:true,
maxItemsToShow:10/
}
);
// --- Автозаполнение ---
});
</script>
Как видно, сначала мы указываем id наших input (#city_from, #city_to), дальше идёт список городов, а потом уже параметры.
Непосредственно наша форма в html:
<table cellspacing="0" cellpadding="3" border="0" width="900">
<tbody>
<tr>
<td>Отправка груза:<span class="required">*</span></td>
<td>из <input type="text" name="city_from" id="city_from" value="" onkeydown="if(event.keyCode==13) return false;" autocomplete="off" class="ac_input"></td>
<td>в <input type="text" name="city_to" id="city_to" value="" onkeydown="if(event.keyCode==13) return false;" autocomplete="off" class="ac_input"></td>
</tr>
</tbody>
</table>
Кстати "onkeydown="if(event.keyCode==13) return false;" запрещает отправлять форму при нажатии клавиши Enter
Расшифровка параметров:
delay – задержка в миллисекундах. Если в течение этого времени пользователь не нажимал клавиши, активизируется запрос. Если используется локальный запрос (к данным, находящимся непосредственно в файле), задержку можно сильно уменьшить. Например до 40ms. (По умолчанию: 400).
minChars – минимальное число символов, которое пользователь должен напечатать перед тем, как будет активизирован запрос.
matchSubset – использовать ли кэш для уточнения запросов. Использование этой опции может сильно снизить нагрузку на сервер и увеличить производительность. Не забудьте при этом еще и установить для cacheLength значение побольше.
autoFill – когда Вы начинаете вводить текст, в поле ввода будет подставлено (и выделено) первое подходящее значение из списка. Если Вы продолжаете вводить текст, в поле ввода и далее будет подставляться подходящее значение, но уже с учетом введенного Вами текста. (По умолчанию: false).
maxItemsToShow – ограничивает число результатов, которые будут показаны в выпадающем списке. Если набор данных содержит сотни элементов, может быть неудобно показывать весь список пользователю. Рекомендованное значение 10.
На этом всё. Думаю как подключить автозаполнение к форме с Formit, проблем не возникнет. Если у Вас остались вопросы, задавайте через форму ниже.
03.01.2016 / 13199
Я задумал вот как поступить. Что бы не нагружать сервер, но при этом получать данные из MYSQL, я решил через PHP собрать все данные из базы в массив и передать его через JSON в JS. Сделал я это вот как:
<? $array_js = json_encode($array_php); ?> Где $array_php — это и есть массив, собранный в PHP.
Далее в JS я принимаю значение массива вот так:
var obj=<? echo $array_js ?>;
Затем принимаю этот массив уже в нашей функции
$("#search").autocompleteArray([obj],
Но почему при заполнении выдает только первое значение массива, остальных не видит?!
Полагаю я напортачил с переменными. Может быть поможете с решением?
Спасибо!
Скорее всего у Вас не верный массив в $array_php
P.S. Код оформляйте в тэг
Вот так выглядит код сборки данных в PHP:
Я уже задумался. Как я понял, JSON передает данные в виде объекта. А функция работает с массивом. Может быть в этом причина? Или я все же не верно организовал массив в PHP?
Еще интересное заметил.
Если вывести полученный массив в JS через Алерт, вот так:
Ты будет виден весь массив, а не только его первое значение.
В любом случае спасибо за статью и за помощь!
Гуд, что разобрались
Ох как я не внимателен :)
После заполнения в консоле введите Если выведет, то проблема в PHP, или куда вы запрос отправляете.
Кроме того, что я добавил кнопку, по нажатию которой должно выводиться введенное в инпут значение.
Вот так выглядит скрипт, выводящий на экран информацию, введенную в поле input:
Результат выводится в блок с id=«info»
Само собой получается undefined
Хотя в консоле выводит верно. Значит я не верно вывожу информацию. Я хотел без перезагрузки страницы передавать в php данные через Ajax, а далее обработка полученных данных. В результате привязал функцию JS к кнопке в форме.
Все сработало :)
на
Раз вы используете jquery
То есть:
Вывод списка городов можно вынести в js файл, либо подключить после тега body
P.S. Заливать можно куда угодно, только укажите правильный путь.