Когда элементы списка уложены в какую-то структуру, выбор значения можно организовать с помощью каскада выпадающих списков Select или самодельных разворачивающихся списков с флажками, используя AJAX.
Список групп значений
Зоопарки
Питомники (Клик! Подгружаются элементы второго уровня)
Заповедники
Зверофермы
Список конечных значений
Зоопарки
Питомники
[ ] Моржовники
[ ] Мышатники
[ ] Тигрятники
Заповедники
Зверофермы
Выбирая группу, пользователь не должен думать о том, как бы не пропустить нужный элемент. Хорошо, когда нужно проверять все подозрительные разделы на предмет наличия подходящих значений. Поэтому структура часто наполняется синонимами-ссылками.
Список значений с синонимами-дубликатами
Зоопарки
Питомники
[ ] Моржовники
[ ] Мышатники
[ ] Тигрятники
Заповедники
Зверофермы
Коровьи фермы
Фермы с дикими животными (Ссылка на группу «Питомники»)
Варианты с укладкой значений списка в структуру подходят для поиска заранее неизвестных значений.
Если подразумевается частый выбор значений из списка, можно предположить в пользователях некоторое знакомство с элементами и их названиями. В таких случаях применяются автозаполняющиеся поля. Дополнив список синонимами, можно рассчитывать на успех.
Иногда имеет смысл комбинирование поиска по подстроке и «жесткую» реализацию структуры. Опытным пользователям предлагается поиск, возможно с ограничением области, неопытным — хождение по категориям. Вопрос в том, какие средства целесообразно вложить в разработку механизма.
Резюме
1. Выпадающие списки Select плохо подходят для работы с большими множествами. Плюсами являются компактность и возможность поиска значения по первым буквам.
2. Определив взаимоотношения между элементами списка, можно сделать поиск значений по структуре. Проблемы выпадающих списков стоят не так остро, минус — сложность качественной реализации.
3. Можно развивать динамическое формирование списка по наличию подстроки в названиях элементов. Минус — не все пользователи смогут пользоваться таким механизмом.
4. Выбор конкретного решения сильно зависит от специфики задачи.
Комментарии
phoinix, 13.02.2007 13:53
Тут вот пришла такая идея - выпадающие списки не такие уж и "выпадающие". Используя атрибут size можно сделать просто список с прокруткой.
Развивая этот способ и используя, по моему, не сложный JavaScript можно организовать фильтрацию элементов списка по мере набора какого-либо значения.
Правда такой способ не совсем понятен будет пользователю, но думаю это не так трудно растолковать.
Дмитрий Сергеев, 13.02.2007 15:49
Можно вообще сделать собственный GUI control, взяв за основу scrollable checklist от Nicholas Rougeux. Нужно только написать скрипт для поиска значений по подстроке.
Taras Brizitsky, 16.02.2007 13:54
Может, я что-то пропустил, но почему бы в таком случае не использовать поиск? Для действительно больших списков это может быть очень неплохим вариантом.
Дмитрий Сергеев, 16.02.2007 14:08
Смотрите: в организацию приходит очень много писем обычной почтой. Специальная девушка забивает данные об отправителях в информационную систему.
При этом есть проблема: из одной организации могут прийти письма, подписанные как "ЗАО "Бахчисарай", так и просто "Бахчисарай" и еще пять вариантов.
Для ИС важно, чтобы в справочнике предприятий не было дубликатов. Девушка не заинтересована в тщательном расследовании: есть ли корреспондент уже в базе или нет. Поэтому ей в первую очередь предлагают выбирать из фиксированных значений (из длинного списка), а уж если ничего не нашлось, то создавать новую запись.
Так что девушка вряд ли обойдется одним поиском, ей нужен какой-то механизм выбора уже существующих значений.
По-моему подобные ситуации -- не редкость.
dseverin, 16.02.2007 14:26
Как насчет следующей идеи - закрепление строк и схлопывание не закрепленных:
---------------------
item 1 -- first in the list or list header
........ -- collapse area 1, dozens of items hidden
item K -- [sticky]
........ -- collapse area 2
item M -- [sticky]
........ -- collapse area 3
item N -- new sticky item
item N+1
item N+2
item N+3
---------------------
при закреплении элемента схлопывается всё до этого элемента, свёрнутая область может быть раскрыта/закрыта щелчком по ней, схлопывание снизу может быть динамическое по мере прокрутки.
Дмитрий Сергеев, 16.02.2007 14:36
Занятная идея. Спасибо. Только иерархию придется строить.