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

Исключение скрытых полей из запроса на сервер: JavaScript

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

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

JS
Скопировать код
document.querySelector('form').onsubmit = () => {
  document.querySelectorAll('input[style*="display: none"]').forEach(input => input.disabled = true);
};
Кинга Идем в IT: пошаговый план для смены профессии

Принцип обработки скрытых полей формы

При отправке формы все активные элементы формы с атрибутом name включаются в отправляемые данные. Стиль display: none лишь скрывает элемент, но это не мешает его отправке. Для исключения такого элемента из данных формы, его необходимо деактивировать.

Клиентская проверка с помощью JavaScript

Если видимость элементов формы изменяется в процессе взаимодействия пользователя с формой, JavaScript может провести проверку и деактивировать скрытые элементы перед отправкой формы:

JS
Скопировать код
const form = document.querySelector('form');
form.addEventListener('submit', function() {
  Array.from(form.elements).forEach(element => {
    if (window.getComputedStyle(element).display === 'none') {
      element.disabled = true;
    }
  });
});

Такой подход позволяет динамически проверять элементы на скрытость и предотвращать их отправку на сервер.

Управление скрытыми полями с использованием jQuery

Если вы используете jQuery, управление скрытыми элементами формы становится еще проще:

JS
Скопировать код
$('form').submit(function() {
  $(this).find(':input:hidden').prop('disabled', true);
});

В jQuery селектор :hidden обнаруживает не только элементы со стилем display: none, но и те, что скрыты другими способами.

Фильтрация данных на стороне сервера: ваша защита

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

Мониторинг производительности: ищем баланс

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

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

Скрытые элементы формы – это словно контрабанда в аэропорту интернет-форм:

HTML
Скопировать код
<input type="text" name="visible-field" style="display:block" value="Я допущен"> // Всё в порядке, можно отправляться ✈
<input type="text" name="hidden-field" style="display:none" value="Моя отправка секретна"> // Вы забыли меня деактивировать 😉

И чтобы эти "секретные пассажиры" не попали на сервер:

JS
Скопировать код
if (element.style.display == 'none') {
   element.disabled = true; // Тайна останется с вами 👮‍♀️
}

Теперь на сервер улетают только видимые элементы. ✈️✅

Усовершенствованные методы и особые случаи

Тумблер для скрытия/отображения элементов

Если элемент то скрывается, то становится видимым, вы можете контролировать свойство disabled в зависимости от его состояния:

JS
Скопировать код
function updateFieldVisibility(field) {
  if ($(field).is(':hidden')) {
    $(field).prop('disabled', true);
  } else {
    $(field).prop('disabled', false);
  }
}

$('#myToggleButton').click(function() {
  let field = $('#fieldToToggle');
  field.toggle();
  updateFieldVisibility(field);
});
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Незаметные элементы

Скрытие элементов в CSS может быть сложнее, чем кажется на первый взгляд. Для того, чтобы обнаружить такие элементы:

JS
Скопировать код
function isElementVisuallyHidden(element) {
  let style = window.getComputedStyle(element);
  return style.opacity === '0' || style.position === 'absolute' && style.left.startsWith('-');
}

document.querySelector('form').onsubmit = () => {
  document.querySelectorAll('input[type="text"]').forEach(input => {
    if(isElementVisuallyHidden(input)){
      input.disabled = true;
    }
  });
};

Дизайн форм: важность удобства использования

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

Проверка целостности данных: это действительно важно

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

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой стиль скрывает элемент формы, но не предотвращает его отправку на сервер?
1 / 5