Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оптимизация Select
 
 автор: Richard Ferlow   (22.06.2009 в 09:42)   письмо автору
 
 

Все тот же сайт) http://www.pecom.ru/ru/calculator/?type=2&var2=1


Так вышло, что есть список городов, из которых нужно только существующий в базе данных выбрать. Городов 2000 штук.

Просто Select не подходит — это замучаются выбирать, однако функционал нужен отчасти от него.


Суть такова — пользователь начинает вводить нужное ему название города, а ему предлагаются варианты из существующих. Однако должна быть однозначная возможность именно существующего города и получение ID этого города формой — т.е. просто ввести название от балды пользователь не может.

Пока кол-во вписывалось в разумные рамки(порядка 100), вполне подходил
Jquery Flexselect rmm5t.github.com/jquery-flexselect/ работает просто — Select заменяется на Input с предлагаемыми вариантами. если ничего не выбрал — поле сбрасывается.

При 2000 этот способ размеется тормозит.

Каким образом можно иначе сделать?

У меня есть пара мыслей, однако не знаю как их воплотить. И в интернете не могу найти похожие реализации.

  Ответить  
 
 автор: PAT   (22.06.2009 в 10:07)   письмо автору
 
   для: Richard Ferlow   (22.06.2009 в 09:42)
 

Повторяю ещё раз то, что уже писал - вам не нужна "трансформация" инпута в селект.
Селект (вернее - "псевдоселект") со ВСЕМИ вашими двумя тысячами опшенов
должен быть СРАЗУ на странице.
Как только пользователь введёт хоть один символ - "псевдоселект" становится видимым.
По окончании ввода (или при отказе от ввода) "псевдоселект" вновь становится невидимым.

Воспользуйтесь "Поиском файлов и папок" и найдите на жёстком диске вашего компьютера
файлы по маске *.chm.
Просмотрите найденные файлы с целью обнаружения такого, где в левой панели будет
присутствовать закладка "Указатель".
И попробуйте там чего-либо ввести в инпут сверху - и то, что вам будет предложено в списке,
и то, чего в списке нет.

ИМХО, именно такой функционал вам и нужен.
Реализовать его с помощью "чистого" JS - элементарно.

"Копайте" в направлениях:
1. сортировка городов по алфавиту - на сервере.

2. передача списка городов от сервера в браузер в виде трёх строк:
|Абакан|Абакур|Абан... -- города, преобразовываете в массив методом split ()
0,7,14,... -- где числа соответствуют индексам символов | первой строки
value0, value1, value2... -- нужные вам значения для городов

3. "псевдоселект" - это <DIV style="width: ЧТО-НАДО; height: ЧТО-НАДО; overflow: auto">,
внутри которого ваши 2000 городов в виде <DIV id="dXXX" style="width: 100%">Город</DIV>,
где XXX - число из второй переданной с сервера строки.
Формируется "псевдоселект" на странице СРАЗУ из данных первой и второй строки с
использованием методов createElement () и appendChild ().

4. отслеживание ввода символов в инпут -- onkeydown или onkeyup

5. определение id выделяемого дива - id = 'd' + ПЕРВАЯ_СТРОКА.indexOf (value_инпута)

6. видимый | невидимый -- style.display = 'block' | 'none'

7. прокрутка "псевдоселекта" до дива с начальными введёнными символами - scrollIntoView ()

8. выделение "опшена" в списке -- style.color, style.backgroundColor, style.border

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования