Не активна кнопка отправить запрос

Перестала быть активной кнопка «Отправить запрос»? Не нервируйтесь — найдите причину и решение прямо здесь, верните форму в строй.

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Проблема неактивной кнопки отправки формы или запроса — одна из самых частых и критичных для бизнеса. Она приводит к прямой потере лидов, снижению конверсии и раздражению пользователей. По данным мониторинга за 2026 год, значительная часть «тихих» сбоев форм обратной связи остается незамеченной стандартными системами проверки доступности сайта.

В этой статье мы подробно разберем причины, почему кнопка «Отправить», «Отправить запрос» или «Купить» может быть неактивна (disabled) или нажатие на нее не дает результата, и предложим пошаговый алгоритм решения для разработчиков, маркетологов и владельцев сайтов.

Основные категории причин

Поиск причины следует вести последовательно — от простого к сложному, как рекомендуют эксперты веб-разработки:

  1. CSS-стили и верстка — перекрытие элементов, pointer-events: none, невидимые слои поверх кнопки.
  2. JavaScript-логика, валидация на клиенте, обработчики событий, предотвращение дефолтного поведения.
  3. Серверная часть и сеть — CORS-ошибки, неверные эндпоинты, ошибки PHP/Node.js/Python бэкенда, проблемы с SMTP.
  4. Браузерные конфликты и расширения — блокировщики рекламы, приватные режимы, кэш, специфика конструкторов сайтов (CMS).

Кнопка находится вне тега <form>

Это классическая ошибка. Если кнопка <button type="submit"> или <input type="submit"> находится за пределами тега <form>, она не отправит данные формы по умолчанию.

Решение: Либо поместите кнопку внутрь <form>, либо используйте атрибут form="id_формы" на кнопке, указывающий на ID формы.

Неверный атрибут type

По умолчанию у тега <button> тип submit. Однако разработчики часто явно пишут type="button" для стилизации или использования в JS, забывая вернуть type="submit" для кнопки отправки.

<!-- Неправильно для отправки -->
<button type="button" class="btn">Отправить запрос</button>

<-- Правильно -->
<button type="submit" class="btn">Отправить запрос</button>

Если в форме есть поля с атрибутом required, браузер автоматически блокирует отправку (кнопка визуально активна, но сабмит не происходит) до их заполнения. Часто пользователи не замечают встроенные тултипы браузера.

Совет: Настройте кастомную валидацию через JS и атрибут novalidate на форме, чтобы контролировать UX полностью.

CSS и визуальные баги: «Кнопка есть, но не нажимается»

Перекрытие элементов (z-index, position)

Частая причина после редизайна или установки виджетов (чатов, попапов) — невидимый блок (например, контейнер футера, модального окна с display: none, но без visibility: hidden, или оверлей загрузки) накладывается на кнопку.

Диагностика: Откройте DevTools (F12) -> Инспектор элементов (Ctrl+Shift+C) -> наведите на кнопку. Если в консоли выделяется другой элемент — найдите его в DOM и исправьте z-index или pointer-events.

Свойство pointer-events: none

Иногда на контейнер формы или саму кнопку вешается pointer-events: none для отключения взаимодействия во время загрузки, но забывают вернуть auto после завершения.

JavaScript: логика блокировки и обработка отправки

Клиентская валидация «до первого нажатия»

Современные UX-рекомендации (в т.ч. из статей на Хабре за май 2026) советуют делать кнопку неактивной (disabled) до заполнения всех обязательных полей. Если скрипт валидации содержит баг (например, не учитывает автозаполнение браузером или маски ввода телефона), кнопка останется неактивной навсегда.

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

Конфликт обработчиков событий (event.preventDefault)

Если на форму повешено несколько слушателей submit (например, от аналитики, CRM-виджета, собственного кода), и один из них вызывает e.preventDefault или return false при ошибке, отправка прервется.

Проверьте вкладку Event Listeners в DevTools на элементе <form>.

Проблема «Двойного сабмита» и блокировка кнопки

Частый паттерн: при клике кнопка становится disabled, идет AJAX-запрос. Если запрос падает с ошибкой (500, 422, таймаут) и в блоке catch нет разблокировки кнопки — она остается неактивной. Пользователь не может повторить попытку без перезагрузки страницы.

// Пример правильной обработки ошибки
fetch(url, options)
 .then(response => { ... })
 .catch(error => {
 console.error(error);
 showErrorMessage('Ошибка сервера, попробуйте позже');
 })
 .finally( => {
 submitButton.disabled = false; // ВСЕГДА разблокируем
 submitButton.textContent = 'Отправить запрос';
 });

Серверные и сетевые ошибки: «Кнопка нажата, но заявки нет»

Согласно данным сервисов мониторинга (например, Pingvera, отчеты за июль 2026), форма может открываться, кнопка нажиматься, но заявки не доходят. Обычная проверка доступности (ping/HTTP 200) это не выявит.

CORS Policy (Cross-Origin Resource Sharing)

Критическая ошибка, когда форма отправляет данные на чужой домен (например, кастомный обработчик на отдельном сервере api..ru или CRM .amocrm.ru), а на сервере-приемнике не настроены заголовки Access-Control-Allow-Origin.

Симптом: В консоли браузера (вкладка Console) ошибка: Blocked by CORS policy: No 'Access-Control-Allow-Origin' header.... Пользователь ошибку не видит, кнопка может визуально «проглотить» клик.

Диагностика: Вкладка Network -> фильтр Fetch/XHR -> ищите запрос с красной строкой или статусом (blocked:cors).

Неверный Action / Endpoint / Method

  • Action: Указывает на несуществующий URL или старый эндпоинт после миграции.
  • Content-Type: JS (fetch/axios) шлет application/json, а бэкенд (PHP $_POST, Python request.form) ждет multipart/form-data или application/x-www-form-urlencoded. Данные приходят пустыми.

Бэкенд-ошибки и SMTP

Если запрос уходит (статус 200 OK), но письмо не приходит — проблема в серверной логике:

  • Ошибки в PHP-скрипте обработчика (проверьте error_log на сервере).
  • Проблемы с очередями писем (RabbitMQ, Redis, системная очередь sendmail/postfix).
  • Настройки SMTP: неверные креды, порт (25/465/587), блокировка хостером исходящих портов.
  • Спам-фильтры и DMARC/SPF/DKIM записи домена — письма уходят в спам или отвергаются принимающим сервером.
  • reCAPTCHA / hCaptcha: неверный секретный ключ, истекший токен, превышен лимит запросов;

Специфические платформы и сервисы

Госуслуги (Gosuslugi.ru)

Частый запрос пользователей: «Все заполнил, кнопка неактивна». Причины часто в:

  • Незаполненных скрытых обязательных полях (раскрывающихся блоках).
  • Ошибках форматирования данных (СНИЛС, паспорт, адрес по ФИАС/КЛАДР).
  • Несогласии с обработкой ПД (чекбокс внизу формы).
  • Технических работах на портале (проверяйте раздел «Техработы» на gosuslugi.ru).

Google AdSense / Google Ads

В разделе «Нарушения» кнопка «Отправить на проверку» может быть неактивна, если:

  • Не прошло минимальное время с момента предыдущей апелляции.
  • Нарушение не подлежит обжалованию (например, «Обход систем» / Circumventing Systems).
  • Аккаунт находится в статусе «Отключен» без права восстановления.

Outlook / Microsoft 365 (Десктоп и Web)

Проблема исчезновения кнопки «Отправить» известна давно (фиксы от сентября 2025). Причины:

  1. Проблемы с профилем Outlook (поврежденный файл .ost / .pst).
  2. Надстройки (Add-ins) — антивирусы, CRM-плагины. Запустите Outlook в безопасном режиме (outlook.exe /safe).
  3. Настройки группы отправки/получения: Отправить/Получить -> Группы отправки/получения -> Определить группы -> Изменить -> проверить галочку «Включить выбранную запись в эту группу» для нужной учетной записи.
  4. Коррупция файла outcmd.dat (хранит настройки панелей инструментов). Удаление файла помогает (пересоздается при запуске).

Конструкторы сайтов (Tilda, Bitrix, WordPress + CF7/Elementor, Wix)

  • Кэш: Агрессивное кэширование (Cloudflare, плагины WP Rocket, кэш конструктора) отдает старую версию JS, где кнопка заблокирована.
  • Конфликт плагинов: Несколько форм на странице с одинаковыми ID/классами.
  • Ограничения тарифа: На бесплатных тарифах некоторые конструкторы блокируют отправку форм или лимит заявок исчерпан.

Алгоритм диагностики: Пошаговый чек-лист

Следуйте этому порядку действий, чтобы найти причину за 15-30 минут:

  1. Проверка в «Инкогнито» / Safe Mode. Отключает расширения и кэш. Если работает — проблема в расширении (uBlock, AdGuard, Privacy Badger часто блокируют трекеры в формах) или кэше браузера.
  2. DevTools -> Console (Консоль). Ищите красные ошибки Uncaught TypeError, CORS policy, 404/500 на запрос формы.
  3. DevTools -> Network (Сеть) -> Fetch/XHR. Нажмите кнопку. Есть ли запрос?
    • Есть запрос, статус 200: Проблема на бэкенде (обработчик, SMTP, CRM). Смотрите Response (ответ сервера).
    • Статус 4xx/5xx / CORS / Failed: Проблема в настройках сервера/хостинга/домена.
  4. Инспектор элементов (Elements). Есть ли у кнопки атрибут disabled? Есть ли у формы novalidate? Не перекрыт ли элемент другим слоем (проверьте через Computed styles -> pointer-events).
  5. Логи сервера. access.log (пришел ли POST), error.log (PHP/Python/Node ошибки), логи почтового сервера (/var/log/mail.log).

Профилактика: Регламент проверки после изменений

Как отмечают эксперты по коммерческим сайтам (обзоры за август 2026), для лендингов и интернет-магазинов критически важно ввести обязательный регламент:

После ЛЮБОЙ правки кода, контента, обновления плагинов/темы/ядра CMS — обязательно ручная проверка: «Купить», «Отправить», «Заказать звонок», все якорные ссылки, модальные окна.

Автоматизация: используйте сквозной e2e тестирование (Cypress, Playwright, Puppeteer), которое эмулирует заполнение и отправку формы на стейджинге перед деплоем в прод.

Резюме: Ключевые точки входа в проблему

Симптом Наиболее вероятная причина Где смотреть
Кнопка серая, атрибут disabled есть JS-валидация не проходит / не снял блокировку после ошибки AJAX Console, Sources (JS код валидации)
Кнопка нормальная, клик не реагирует Перекрытие CSS / pointer-events: none / e;preventDefault без условия Elements (Inspector), Event Listeners
Клик срабатывает, спиннер крутится вечно Запрос ушел, но нет ответа (timeout) / бесконечный редирект Network (pending), Server Logs
Запрос ушел, ответ 200 OK, но заявки нет Бэкенд-ошибка (письмо не ушло), неверный email-получатель, спам-фильтр Backend Logs, Mail Logs, CRM
Ошибка CORS в консоли Форма шлет на другой домен/поддомен без заголовков CORS Network -> Headers, Server Config (Nginx/Apache/.htaccess)
Работает в Инкогнито, не работает в обычном режиме Расширение-блокировщик / Кэш / Cookies Отключение расширений по одному, Clear Cache

Неактивная кнопка «Отправить запрос» — это симптом, а не диагноз. В 2026 году основная масса проблем сместилась с «просто верстки» на зону ответственности JavaScript (валидация, AJAX, обработка ошибок) и интеграций (CORS, API CRM, SMTP).

Внедрение культуры «проверки кнопок после каждого деплоя», настройка мониторинга успешных сабмитов форм (не просто доступности страницы, а именно события form_submit в GA4/Яндекс.Метрике/Amplitude) и грамотная обработка ошибок на клиенте (разблокировка кнопки в finally) сэкономят вам не один десяток потерянных лидов.


Статья подготовлена на основе актуальных данных интернета за период 2021–2026 гг. (источники: Хабр, Pingvera, форумы Google AdSense, поддержка Microsoft, профильные блоги веб-разработчиков). Конфиденциальные данные (домены, IP, логины) замаскированы символами *.