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

Функция формы работала, пока на странице не появился другой блок

12 августа 2026 1 МИН КОМАНДА MODKOD

Один и тот же именованный колбэк формы Тильда вызывает по-разному: если на странице доступен jQuery, аргумент оборачивается в jQuery; если библиотеки нет, передаётся обычный DOM-элемент формы. Поэтому код способен сломаться после добавления совершенно другого блока, который принёс или убрал jQuery. Безопасный обработчик сначала нормализует аргумент, а затем работает с одной формой.

✓ ПРОВЕРЕНО 29 июля 2026 именованный обработчик вызывается с jQuery(form) при наличии jQuery и с form без него, а исключение выводится в console.error — ветка eval пользовательского callback в tilda-forms-1.0.min.js

Короткий ответ

Приведите аргумент к DOM-форме в первой строке и проверяйте результат. Не пишите весь обработчик под $form.find(...), если не управляете загрузкой jQuery.

function afterLead(arg) {
  const form = arg instanceof HTMLFormElement ? arg : arg && arg[0];
  if (!form) {
    console.error('afterLead: форма не найдена');
    return;
  }

  const email = form.querySelector('[name="Email"]');
  // Дальше работаем только с DOM API.
}

Почему поломка кажется случайной

Вы не меняли форму. Вы добавили слайдер, магазин или старый блок — и на странице изменился набор библиотек. В одной сборке глобальный jQuery есть, в другой нет. Тильда выбирает аргумент в момент вызова, поэтому старый обработчик внезапно получает другой тип.

Как диагностировать

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

Не проверяйте только так:

console.log(arg);

В консоли jQuery-объект и элемент могут выглядеть похоже. Печатайте явные признаки:

console.log({
  isForm: arg instanceof HTMLFormElement,
  first: arg && arg[0],
  jquery: Boolean(window.jQuery),
});

Правило для передачи проекта

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

Вопросы по этой статье 2

Проверьте argument instanceof HTMLFormElement. Если нет, у jQuery-объекта первый элемент обычно лежит в argument[0].