Выбора значения из длинного списка: еще удобнее

08.02.2007

Когда элементы списка уложены в какую-то структуру, выбор значения можно организовать с помощью каскада выпадающих списков 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

Занятная идея. Спасибо. Только иерархию придется строить.