НейроАгент

Запрет дублирования форм в Tilda: полное руководство

Узнайте, как реализовать запрет на повторное заполнение форм в Tilda с помощью localStorage. Пошаговое руководство с кодом и альтернативными методами.

Как реализовать запрет на повторное заполнение формы одним пользователем на Tilda?

Имеется всплывающая форма, активируемая по клику на кнопку. Требуется настроить так, чтобы при повторном нажатии на кнопку открывалось окно с сообщением об успешной отправке (поскольку форма уже была заполнена ранее).

Предполагается, что решение может быть связано с сохранением данных пользователя в local storage, но механизм реализации неизвестен.

Дополнительная сложность заключается в недавнем обновлении Tilda: теперь форма автоматически закрывается после отправки и отображает сообщение об успехе без присвоения идентификатора (ID), что затрудняет отслеживание уже отправленных форм.

НейроАгент

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

Содержание

Принцип работы решения

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

Преимущества этого подхода:

  • Работает без перезагрузки страницы
  • Сохраняется даже при закрытии вкладки
  • Не требует серверной части
  • Простая реализация

Однако есть важное ограничение: localStorage привязан к конкретному домену и поддомену, поэтому если у вас есть несколько поддоменов, может потребоваться использование cookies вместо localStorage.

Реализация через localStorage

Для реализации потребуется добавить JavaScript код, который будет управлять процессом. Вот базовый алгоритм:

  1. Создание уникального идентификатора формы - используйте уникальный ID для каждой формы на вашем сайте

  2. Проверка при открытии формы - перед отображением формы проверяйте, был ли она уже отправлена

  3. Сохранение после отправки - после успешной отправки сохраняйте информацию в localStorage

Пример кода для проверки:

javascript
// Функция проверки, была ли форма уже отправлена
function isFormSubmitted(formId) {
    const submittedForms = JSON.parse(localStorage.getItem('submittedForms') || '[]');
    return submittedForms.includes(formId);
}

// Функция отметки формы как отправленной
function markFormAsSubmitted(formId) {
    const submittedForms = JSON.parse(localStorage.getItem('submittedForms') || '[]');
    if (!submittedForms.includes(formId)) {
        submittedForms.push(formId);
        localStorage.setItem('submittedForms', JSON.stringify(submittedForms));
    }
}

Интеграция с Tilda

В Tilda есть несколько способов добавить этот функционал:

Через Zero Block

  1. Откройте Zero Block редактор
  2. Добавьте HTML-блок
  3. Вставьте JavaScript код
  4. Настройте триггеры для кнопки и формы

Через интеграцию с GTM

Как упоминается в Analytics Mania, можно настроить Google Tag Manager для отслеживания отправленных форм через local storage:

  1. Создайте пользовательскую переменную JavaScript
  2. Настройте триггер на клик по кнопке отправки
  3. Добавьте тег для сохранения ID формы в localStorage
  4. Создайте отдельную логику для проверки перед открытием формы

Через HTML-интеграцию

Добавьте следующий код в настройки страницы Tilda:

javascript
<script>
document.addEventListener('DOMContentLoaded', function() {
    // ID вашей формы
    const formId = 'your-form-id';
    
    // Проверяем, была ли форма уже отправлена
    if (isFormSubmitted(formId)) {
        // Показываем сообщение об успехе вместо формы
        showSuccessMessage();
        return;
    }
    
    // Функция отправки формы
    function submitForm() {
        // Логика отправки формы
        markFormAsSubmitted(formId);
        showSuccessMessage();
    }
    
    // Привязка к кнопке отправки
    const submitButton = document.querySelector('#submit-button');
    if (submitButton) {
        submitButton.addEventListener('click', submitForm);
    }
});
</script>

Обработка всплывающих окон

Для всплывающих форм в Tilda требуется дополнительная логика:

  1. Модификация триггера открытия - перед открытием popup проверяйте состояние формы

  2. Управление контентом popup - в зависимости от состояния показывайте либо форму, либо сообщение

  3. Обработка автоматического закрытия - учитывайте, что Tilda автоматически закрывает форму после отправки

Пример для popup формы:

javascript
// Функция открытия popup с проверкой
function openPopupWithCheck(popupId) {
    if (isFormSubmitted(popupId)) {
        // Создаем элемент с сообщением об успехе
        const successMessage = createSuccessMessage();
        // Показываем его вместо popup
        showSuccessElement(successMessage);
    } else {
        // Открываем обычный popup
        Tilda.Forms.openPopup(popupId);
    }
}

// Заменяем стандартное открытие popup
const originalOpen = Tilda.Forms.openPopup;
Tilda.Forms.openPopup = function(popupId) {
    openPopupWithCheck(popupId);
};

Альтернативные методы

Использование cookies

Если работаете с несколькими поддоменами, используйте cookies вместо localStorage:

javascript
// Функция работы с cookies
function setCookie(name, value, days) {
    const date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    const expires = "expires=" + date.toUTCString();
    document.cookie = name + "=" + value + ";" + expires + ";path=/";
}

function getCookie(name) {
    const cname = name + "=";
    const decodedCookie = decodeURIComponent(document.cookie);
    const ca = decodedCookie.split(';');
    for(let i = 0; i < ca.length; i++) {
        let c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(cname) == 0) {
            return c.substring(cname.length, c.length);
        }
    }
    return "";
}

Интеграция с внешними сервисами

Сервисы вроде Tally.so предлагают встроенные механизмы предотвращения дубликатов:

  1. Настройте webhook для приема данных
  2. Используйте их API для проверки дубликатов
  3. Реализуйте логику отображения сообщений

Серверная проверка

Если требуется более надежное решение, реализуйте серверную проверку:

  1. Отправляйте уникальный ID вместе с данными формы
  2. Проверяйте на сервере, не была ли уже отправлена форма с таким ID
  3. Возвращайте соответствующий статус

Тестирование и отладка

При реализации важно протестировать различные сценарии:

  1. Первое открытие - форма должна открываться нормально
  2. Повторное открынение - должно показываться сообщение об успехе
  3. Очистка localStorage - после очистки форма должна снова открываться
  4. Разные браузеры - проверьте работу в разных браузерах
  5. Инкогнито-режим - убедитесь, что работает корректно

Для отладки используйте консоль браузера:

javascript
// Включите логирование
console.log('Проверка формы:', formId);
console.log('Отправленные формы:', localStorage.getItem('submittedForms'));
console.log('Форма уже отправлена:', isFormSubmitted(formId));

Источники

  1. Prevent Duplicate Form Submissions with Google Tag Manager - Analytics Mania
  2. Prevent duplicate submissions - Tally.so Help
  3. How to Set Up Forms on Tilda - Official Documentation
  4. Multiple Form Submission Prevention - Will Master
  5. How do I create a pop-up window? - Tilda FAQ

Заключение

Для реализации запрета на повторное заполнение форм в Tilda рекомендуется использовать localStorage с учетом следующих моментов:

  • Создайте уникальный идентификатор для каждой формы на сайте
  • Реализуйте проверку перед открытием формы через JavaScript
  • Сохраняйте статус отправки в localStorage после успешной отправки
  • Учитывайте особенности Tilda - автоматическое закрытие форм и popup
  • Тестируйте решение в разных сценариях использования

Если стандартные методы не подходят, рассмотрите альтернативные варианты с cookies или внешними сервисами. Для более надежной защиты можно комбинировать несколько подходов одновременно.