Как бы вы спроектировали форму с множеством динамических полей?

У нас есть форма, которая позволяет пользователю динамически добавлять входные данные для полей. Например, если у вас есть форма для отслеживания проектов, вы хотите динамически добавлять задачи в этот проект. Просто чтобы уточнить мой язык: вы динамически добавляете входные данные для поля задачи. Проблема в том, что у нас есть 50 таких полей. Наше текущее решение представляет все 50 полей со знаком плюс (+) рядом с полем, чтобы они могли добавить еще одно поле ввода для этого поля. Метки для поля находятся слева от поля, и каждое добавляемое поле ввода располагается ниже текущего поля ввода.

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

Мой вопрос о презентации: как бы вы это сделали?

Пожалуйста, сохраните ответы на дизайн пользовательского интерфейса. У нас уже есть схема базы данных.


Обновить

Current Solution – это веб-приложение, которое использует JavaScript для динамического добавления новых входных данных и очень похоже на рисунок Кори Трейджера:

Task     [.............] +  
         [.............] +  
         [.............] +  
         [.............] +

Foo      [.............] +
         [.............] +
         [.............] +

Repeat 50 times...

person Sixty4Bit    schedule 30.09.2008    source источник


Ответы (8)


Итак, то, что вы описали, может выглядеть примерно так? Если нет, можете ли вы попробовать "нарисовать" его, пожалуйста?

Task     [.............] +  
         [.............] +  
         [.............] +  
         [.............] +

Foo      [.............] +
         [.............] +
         [.............] +

Это веб-страница или другая технология?

person Corey Trager    schedule 30.09.2008
comment
Это именно то, что мы делаем сегодня. Спасибо за прекрасную диаграмму, я должен был сделать это для моего объяснения :-) - person Sixty4Bit; 30.09.2008
comment
Конечно, вам не нужен + рядом с каждым полем? Вам это нужно только на последнем поле? - person FryHard; 01.10.2008

Это может быть совершенно не по адресу, но в зависимости от требований к полям, и если это конфигурация или интерфейс ввода данных.

Если поля do должны быть открыты для ввода данных, вы можете оставить их определенными как список имен полей и значений и использовать редактирование щелчком для динамического размещения полей ввода в каждом элементе по мере необходимости. .

Это решение могло бы уменьшить визуальный шум, а также сэкономить пространство по вертикали. Как видите, ввод формы занимает больше места, чем обычный текст. Вы можете обслуживать пользователей клавиатуры, перехватывая события вкладок и вызывая щелчок следующего поля для редактирования функций.

Это может выглядеть примерно так. (просто нажав на Foo, чтобы отредактировать содержимое)

Name   : Joe Blogs
Phone  : 555-1234
Cheese : Stilton
        -----------
Foo     | SNAFU   |    
        -----------
Bar    : fubar
Fifty  : Whatever

(+) Add new field...

OR

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

              -------------------------------------------------
Define Fields | name, phone, cheese, foo, bar ..(etc).. fifty |
              -------------------------------------------------

Затем поля отображаются в огромной сетке в соответствии с текущим пользовательским интерфейсом.

person garrow    schedule 30.09.2008
comment
Хороший. Я внесу это в свой список вещей, чтобы попробовать. - person Sixty4Bit; 30.09.2008

Размышляя над тем, что предложил @zachary:

Отобразите форму так, как она была разработана для пользователя, с количеством полей по умолчанию/последним сохраненным. Внизу формы поместите кнопку DropDownButton со значком + и словами Добавить поле (+ Добавить поле).

Если открыть эту кнопку, отобразится список всех доступных полей. Когда пользователь выбирает один из них, форма будет увеличиваться (достаточно для размещения нового поля), новое поле с меткой будет отображаться в нижней части формы, а кнопка добавления поля будет отображаться под новым полем.


Изменить:

Чтобы продолжить тему диаграмм ASCII, я думаю, что мое предложение будет выглядеть так.

Задача [.....................]
[ + Добавить задачу ▼]

Фу [......................]
[ + Добавить Фу ▼]

person FryHard    schedule 30.09.2008

Маленький значок + где-то рядом с последним полем задачи со ссылкой «Добавить новую задачу». При нажатии новое поле задачи появляется под текущим последним заданием.

person zackola    schedule 30.09.2008

Я бы использовал подход перетаскивания, предоставляющий пользователю гибкость в позиционировании. Это возможно даже с помощью веб-приложения. См., например, Dropthings (http://www.dropthings.com/). Это предоставляет весь код, необходимый для реализации перетаскивания в среде ASP.NET.

Какую среду вы используете?

person RB.    schedule 30.09.2008

Если это веб-приложение, вы можете использовать Javascript для динамического управления дополнительными полями. В зависимости от того, можете ли вы обрабатывать форму асинхронно, вы можете использовать Ajax, который упростит некоторые аспекты управления формой.

По сути, каждой задаче потребуется индивидуальное имя, а затем вам нужно будет добавить новый элемент ввода формы с уникальным именем для каждого нового поля, которое они решат добавить. Затем вам нужно будет пройти через форму, используя Javascript, перед отправкой формы, или вы должны будете пройти через данные POST после их отправки.

Конечно, это вводит Javascript в качестве требования для вашего веб-приложения, что не всегда жизнеспособно.

person Noah Goodrich    schedule 30.09.2008

Хорошо, теперь, когда вы добавили мою диаграмму к своему вопросу, мой ответ....

Я не говорю, что это лучше, но это альтернатива. Вот другой способ, который заменяет горизонтальную прокрутку кликом. Вместо перехода от «tasks» к «foo» и «bar» с помощью вертикальной прокрутки используйте «tabs», даже если вам нужно расположить их в несколько рядов. Это облегчает навигацию в случайном порядке. Вы даже можете переключаться между этим представлением с вкладками и обратно к текущему представлению «показать все».

[task][foo][another tab][another tab][etc][etc][etc][etc][etc][etc]
[row2][fred][another tab][etc][etc][etc][etc][etc][etc][etc]
[row3][another tab][wilma][etc][etc][etc][etc][etc][etc][etc]

[task1     ]+
[task2     }+
[task3     ]+ 
person Corey Trager    schedule 01.10.2008

Не могли бы вы использовать систему, подобную той, что реализована в facebook, которая имеет одно текстовое поле, но позволяет добавлять в него несколько элементов? Существуют готовые решения, такие как это, предназначенное для mootools. v1.2 или этот который для jQuery. И вы даже можете разрешить автозавершение задач, уже имеющихся в системе.

person jsnfwlr    schedule 11.07.2009