Skip to content
  1. Компоненты
  2. FetchIt
  3. JS API
  4. События

События ​

События приходят на document и не всплывают: слушайте их на document, а не на форме или window.

В event.detail лежат форма (form), её данные (formData) и экземпляр FetchIt (fetchit), а начиная с fetchit:after — ещё и ответ сервера (response). У fetchit:reset только form и fetchit.

Типы detail для TypeScript: fetchit.d.ts. Примеры в разделах форм, уведомлений, модальных окон, валидации.

СобытиеКогдаОтмена (event.preventDefault())
fetchit:beforeперед отправкой, в formData можно дописать поляформа не отправляется
fetchit:afterпришёл ответ FetchItответ не обрабатывается: ни ошибок полей, ни сообщения, ни fetchit:success и fetchit:error, ни очистки
fetchit:successформа принята; сообщение формы и уведомление уже показаныполя не очищаются
fetchit:errorформа отклонена или не отправиласьошибки полей и сообщение формы не выводятся
fetchit:resetформу сбрасывают: кнопкой, form.reset() или после успеха; значения полей ещё прежниенельзя

Порядок на submit: Message.before → fetchit:before → запрос → Message.after → fetchit:after → при ошибке Message.error + fetchit:error + setError / setFormMessage('validation') → при успехе setFormMessage('success') + Message.success + fetchit:success → grecaptcha.reset(), если виджет на странице есть → при clearFieldsOnSuccess сброс формы.

Хуки FetchIt.Message вызываются перед событием того же момента, поэтому отмена события их не отменяет.

fetchit:before ​

Добавить поля или остановить отправку:

js
document.addEventListener('fetchit:before', (e) => {
  const { formData, fetchit } = e.detail

  formData.set('utm_source', 'landing')

  if ((formData.get('name') || '').length < 3) {
    fetchit.setError('name', 'Слишком короткое имя')
    e.preventDefault()
  }
})

fetchit:after ​

Любой ответ FetchIt:

js
document.addEventListener('fetchit:after', (e) => {
  const { response } = e.detail
  console.log(response.success, response.message, response.data)
})

message и data есть всегда, даже если обрабатывающий сниппет их не прислал: пустая строка и пустой объект.

fetchit:success ​

Успешная отправка. Удобно закрыть модальное окно или отправить метрику:

js
document.addEventListener('fetchit:success', (e) => {
  const { form, response } = e.detail
  if (form.id === 'callback') {
    ym(12345678, 'reachGoal', 'form_' + form.id)
  }
})

Отмена события оставляет поля заполненными.

fetchit:error ​

Ошибка валидации, отказ защиты, ошибка логики сниппета — или запрос, который не дошёл. В response.data лежит карта «поле → сообщение».

js
document.addEventListener('fetchit:error', (e) => {
  const { response, error } = e.detail

  if (response === null) {
    // Ответа FetchIt нет: сеть, чужой ответ, капча без ответа
    console.error(error)
    return
  }

  console.warn(response.data)
})

fetchit:reset ​

Сброс формы: кнопка reset, form.reset() или очистка после успеха. Значения полей в этот момент ещё прежние, так что их можно прочитать. Скрыть свой UI поверх стандартной очистки — тоже здесь.