Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Отправка значений отключенных полей в форме без hidden input

Быстрый ответ

HTML
Скопировать код
<input type="hidden" name="myField" value="disabledValue">

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

Кинга Идем в IT: пошаговый план для смены профессии

Поведение браузеров и способы его обхода

Браузеры, например, Chrome, не учитывают недоступные элементы при отправке форм. Для того, чтобы их значения были засчитаны при отправке, используйте атрибут readonly.

HTML
Скопировать код
<input type="text" name="myField" value="valueYouCannotChange" readonly>

Поля с атрибутом readonly не поддерживают редактирование, однако могут быть под фокусом и передают свои данные при отправке формы.

Обход ограничений для передачи данных полей

Если необходимо передать данные поля, не позволяя их редактировать, атрибут readonly станет отличным решением. Управлять полями в динамических формах можно с помощью JavaScript или jQuery прямо перед отправкой.

JS
Скопировать код
$('form').submit(function() {
  $(this).find(':disabled').prop('disabled', false); // Совет: убедитесь, что эти поля снова станут недоступны после отправки.
});

Данный код делает недоступные поля активными перед отправкой формы, обеспечивая тем самым их учёт в данных формы.

Воспользоваться возможностями сервера для управления данными полей

Серверные фреймворки, например, ASP.NET MVC с синтаксисом Razor, могут настроить формы так, чтобы данные всех полей участвовали в отправке, независимо от их состояния на клиенте.

csharp
Скопировать код
@Html.HiddenFor(model => model.DisabledInputValue); // Синтаксис Razor!

Клонирование данных поля без его активации

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

JS
Скопировать код
function copyToHiddenField(inputElement) {
  var hiddenField = document.createElement('input');
  hiddenField.type = 'hidden';
  hiddenField.name = inputElement.name; 
  hiddenField.value = inputElement.value;
  form.appendChild(hiddenField);
}

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

Управление процессом отправки данных с AJAX

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

JS
Скопировать код
var formData = new FormData();
formData.append('myField', $('#myDisabledField').val());
$.ajax({
  url: 'submitForm',
  type: 'POST',
  data: formData,
  processData: false,
  contentType: false,
  success: function(response) {
    // 🎉 Успех!
  }
});

С использованием AJAX можно учитывать значения из недоступных полей, не меняя при этом структуру формы.

Визуализация

Воспринимаем музыкальную группу как форму, где каждый участник — это элемент управления:

Markdown
Скопировать код
Участники группы: [Вокалист 🎤, Гитарист 🎸, Барабанщик 🥁]

Пусть вокалист заболел и не может выступать:

Markdown
Скопировать код
🎤 (Неактивный), 🎸, 🥁

При записи группы голос вокалиста отсутствует:

Markdown
Скопировать код
Запись 🎧: [🎸, 🥁]

Проблема решается с использованием скрытого трека.

Markdown
Скопировать код
Запись 🎧: [🎸, 🥁] + 🎤 (Скрытый трек)
# Группа звучит в полном составе!

Эффективное управление с помощью клиентского скрипта

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

Учёт навигации по табуляции

Для удобства навигации используйте атрибут readonly с ивентом отправки при помощи JavaScript:

JS
Скопировать код
document.querySelector('form').addEventListener('submit', function(event) {
  var inputs = this.querySelectorAll('[readonly]');
  inputs.forEach(function(input) {
    input.removeAttribute('readonly');
  });
});
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Обеспечение целостности данных

Обеспечьте целостность данных при помощи серверной валидации, так как пользователям доступно лишь копирование значений из полей readonly.

Учёт факторов доступности

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

Подробное ознакомление со стандартами HTML

Для более глубокого понимания темы рекомендуем ознакомиться со спецификациями HTML:

  • HTML 4 подробно объясняет разницу между readonly и disabled. Поля с атрибутом readonly участвуют в навигации и отправке, в отличие от полей с атрибутом disabled.
  • HTML 5 детализирует процесс создания набора данных формы, раскрывая процессы, включая ситуации с readonly полями.

Полезные материалы

  1. Атрибут disabled HTML — Детальное описание атрибута disabled на MDN.
  2. HTML спецификация — Официальный HTML стандарт WHATWG о роли недоступных элементов формы.
  3. Атрибут disabled элемента input — Руководство от W3Schools с примерами использования disabled.
  4. Доступность недоступных кнопок | CSS-Tricks — Статья про доступность элементов управления форм, находящихся в состоянии disabled.
  5. Как отправить форму, когда select неактивен? | Stack Overflow — Обсуждение на Stack Overflow способов обеспечения отправки недоступного поля с использованием JavaScript.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какое значение следует использовать для недоступного поля, чтобы его данные были учтены при отправке формы?
1 / 5