2012-04-17 4 views
0

У меня есть форма, которая используется как интерфейс для CRUD для записей базы данных. Некоторые из элементов в форме взаимозависимы, так что если одно поле имеет значение X, то другие поля должны быть сделаны и заполнены пользователем.HTML: Лучшая практика для POSTing пустых/отключенных форм элементов

Простым примером может быть что-то вроде личной информации раздела:

<select name="relationship-status"> 
    <option value="single">Single</option> 
    <option value="married">Married</option> 
</select> 

<input type="text" name="spouse-first-name" /> 
<input type="text" name="spouse-last-name" /> 

... где поля spouse-first-name и spouse-last-name потребовались бы, если relationship-status был установлен в married, и будут отключены (или скрытые) в противном случае.

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

я могу думать о следующих решениях:

  • Мы могли бы сделать их readonly вместо disabled, но этот метод работает только для некоторых форм контроля (в частности, он не работает для других select элементов), так что это не вариант.

  • Мы можем дублировать каждое из этих полей как вход hidden, который будет POSTed с формой, но не редактируется пользователем, но это похоже на такой взлом.

  • Мы также можем включить отключенные поля перед отправкой, а затем снова отключить их. Это метод, который я использую прямо сейчас, но я чувствую, что у меня что-то не хватает, и должен быть лучший способ.

Есть ли что-то я не думал или более разумный способ выполнения как:

  1. Не позволяет пользователю редактировать поле, и
  2. Учитывая значение поля к быть POSTed с формой, даже если пустой.
+2

Вы должны работать для обеспечения соблюдения действительности данных на стороне сервера.Это означает, что когда кто-то изменяет статус на «одиночный», имя супруга должно быть очищено сервером независимо от значения POST. –

+0

Согласовано. Валидация на стороне клиента предназначена для создания лучшего пользовательского интерфейса. * Проверка на стороне сервера предназначена для обеспечения целостности данных и бизнес-правил. – David

+0

Спасибо вам обоим, и я просто могу сделать это по другим причинам; однако на самом деле он не отвечает на вопрос, который я задал. Существуют и другие сценарии, в которых проверка сервера не помогла бы вообще. – FtDRbwLXw6

ответ

0

Я нашел, что самым надежным и наименее kludgy решением является использование свойства readonly для всех элементов, кроме <select>. Для элементов <select> я просто отключил дочерние элементы <option>, которые в настоящее время не выбраны.. Это эффективно предотвращает изменение пользователем значения. Затем я цвет <select>, как будто он был отключен с серым фоном, чтобы завершить иллюзию. На этом этапе все элементы формы будут размещаться с формой, даже без значений, и независимо от того, являются ли они «отключены» или нет.

0

Моя рекомендация заключается в том, чтобы сделать валидацию на стороне клиента, добавить в javascript функцию form.submit(), если кто-то отключит JS, он не сможет отправить форму, кроме того, что согласен с комментариями других, добавьте проверку сервера.