@Margomi

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

Все привет! Ситуация такая: форма разбита на несколько блоков и каждый блок показывается в зависимости от выбранного значения в селекте. Обработчик селекта js который и меняет блоки с помощью display:none, display:block. Это простой способ, который знает каждый. НО!
Есть поле для ввода данных которое участвует в 3х блоках (1,2,3) одно и тоже и если заполнять блок 1 и блок 2, то значение из этого поля не выводится, а только если оно заполнено в блоке 3. Если это поле удалить из блока 3, то отображаться значение будет при заполнении блока 2, а при заполнении блока 1 это поле не будет отображаться.

Вот собственно и вопрос: как сделать, что бы значение поля выводилось из любого блока. а не только из последнего.
Выводится стандартно
<?php if (!empty($а)): ?>
                    <li>
                      <strong><?php esc_html_e('Значение поля'); ?></strong>
                        <span><?php echo esc_html($а) ?></span>
                    </li>
                <?php endif; ?>
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Обработчик селекта js который и меняет блоки с помощью display:none, display:block.

Вариант А. Переписать этот обработчик так, чтобы наверняка удалял неиспользуемый вариант и создавал блок с нужным вариантом полей, тогда у вас в форме не будут лишних полей.
Вариант A2. Переписать этот обработчик так, чтобы в скрытых блоках имена полей были с префиксами, а не в скрытых префиксы убирались, тогда сервер будет обрабатывать только те поля, у которых нормальные имена (без префиксов).
Вариант A3. К дополнению к display: none, нужно вырубать поля атрибутом disable.
Вариант Б. Поля с именами, которые будут обрабатываться на сервере вынести в отдельные поля hidden (на форме будут поля с теме же именами, но с префиксами, чтобы они не пересекались и не брались в учет сервером), и по submit сделать обработчик, чтобы он переносил в них значения по текущему состоянию формы.
PS: Самый нетрудозатратный для разработчика - вариант А3.
/* 
  Функция вкл и выкл полей формы в различных контейнерах
  @param str enable_id - id-контейнера, в котором нужно вкл. поля ввода
  @param arr disable_ids - массив id контейнеров, в которых нужно выкл. поля ввода
*/
function fields_enable_and_disable(enable_id, disable_ids)
{
  var enable_container = document.getElementById(enable_id); // получаем контейнер, в котором нужно "включить" поля ввода
  var field_types = ['input', 'select', 'textarea']; // все виды полей ввода с которыми нужно проделать манипуляцию вкл/выкл.
  var count_i = field_types.length; // кол-во типов полей
  for(var i = 0; i < count_i; i++) // перебираем типы полей
  {
    var field_type = field_types[i]; // текущий тип поля
    var enable_fields = enable_container.getElementsByTagName(field_type); // получаем коллекцию полей ввода, которые нужно вкл.
    var count_j = enable_fields.length; // кол-во полей текущего типа
    for(var j = 0; j < count_j; j++) // перебираем поля этого типа
      enable_fields[j].disabled = false; // включаем
    var count_k = disable_ids.length; // кол-во контейнеров, в которых нужно выкл. поля
    for(k = 0; k < count_k; k++) // перебираем неактивные контейнеры
    {
      var disable_id = disable_ids[k]; // id - текущего неактивного контейнера
      var disable_container = document.getElementById(disable_id); // получаем неактивный контейнер
      var disable_fields = disable_container.getElementsByTagName(field_type); // получаем поля текущего типа неактивного контейнера
      var count_n = disable_fields.length; // кол-во этих полей по текущ. типу
      for(var n = 0; l < count_n; n++)
        disable_fields[n].disabled = true; // выкл. эти поля
    }
  }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы