Custom Forms

ver.4.2.0
от 21.01.2026 15:38

Основные возможности

  1. Кастомизация настроек
    Переопределение параметры при инициализации скрипта.
  2. Блокировка кнопки "отправить" если не заполнены обязательные поля.
    Можно задать как для всех форм сразу, так и для конкретной формы.
  3. Добавление пометки '*' в (label/placeholder) у обязательных полей, а также у чекбоксов.
    Чтобы вручную в html коде не писать.
  4. Валидация полей при клике по кнопке "отправить форму".
  5. Добавление и удаление класса is-error об ошибке поля.
  6. Добавление и удаление сообщения об ошибке поля.
  7. Применение масок к текстовым полям.
    Например: Телефон, номер и серия паспорта, инн, снилс, огрн, огрнип, кпп, бик, платежный реквизит.
  8. Отображение класса is-focused у текстового поля.
    Когда в поле установлен курсор или введет текст. Отображается кроме чекбоксов и радио кнопок.
  9. Применение стилизации к полю загрузки файлов.
  10. Серилизация полей формы перед отправкой данных на сервер.
  11. Отправка данных формы на сервер.
    В настройках указываем адрес на который необходимо отправлять данные с формы. Можно задать как для всех форм сразу, так и для конкретной формы.
  12. Обновление токена капчи Google Recaptcha v3.
    При каждом нажатии на кнопку 'отправить форму' происходит обновление токена и проставление его в скрытое поле.
  13. Открытие модальных окон во время и после отправки формы.
  14. Отображение количества введенных символов.
  15. Отображение количества символов сколько осталось ввести.
  16. Валидация yandex капчи.
    Форма не отправится пока не отметишь капчу.

Скриншоты

Дефолтный вид формы
Плавающие лейблы
Лейблы слева
Форма авторизации
Форма изменения пароля

Codes

Jade
Html
JS
По умолчанию
от 21.01.2026 15:38
Описание классов:
.form_type_default - Дефолтный классический вид формы. Когда лейблы находятся над текстовыми полями.
.form_type_labels-floating - Лейблы находятся поверх текстового поля и при получении фокуса подлетают вверх. Эффект как у google форм.
.form_type_labels-left - Лейблы располагатся слева от текстовых полей.
Код
      form.form.form_type_[default|labels-floating|labels-left].form-[ID](data-form-id=[ID])
    input(type="hidden", name="g-recaptcha-response", value="")
    .form__fields
        .form__field.form__field-name
            label.form__label(for="form-ID-field-name") Имя
            input.form__input(id="form-ID-field-name", type="text", name="name", data-type="name", value="", placeholder="Имя", data-require)
        .form__field.form__field-phone
            label.form__label(for="form-ID-field-phone") Телефон
            input.form__input(id="form-ID-field-phone", type="text", name="phone", data-type="phone", value="", placeholder="Телефон", data-require)
        .form__field.form__field-email
            label.form__label(for="form-ID-field-email") Почта
            input.form__input(id="form-ID-field-email", type="text", name="email", data-type="email", value="", placeholder="Почта", data-require)
        .form__field.form__field-comment
            label.form__label(for="form-ID-field-comment") Сообщение
            textarea.form__input(id="form-ID-field-comment", name="comment", data-type="comment", placeholder="Сообщение")
        .form__field.form__field-position
            label.form__label(for="form-ID-field-position") Должность
            input.form__input(id="form-ID-field-position", type="text", name="position", data-type="position", value="", placeholder="Должность")
        .form__field.form__field-company-name
            label.form__label(for="form-ID-field-company-name") Компания
            input.form__input(id="form-ID-field-company-name", type="text", name="company-name", data-type="company-name", value="", placeholder="Компания")
        .form__field.form__field-inn
            label.form__label(for="form-ID-field-inn") Инн
            input.form__input(id="form-ID-field-inn", type="text", name="inn", data-type="inn", value="", placeholder="Инн")
        .form__field.form__field-passport-number
            label.form__label(for="form-ID-field-passportNumber") Серия, номер паспорта
            input.form__input(id="form-ID-field-passportNumber", type="text", name="passportNumber", data-type="passportNumber", value="", placeholder="Серия, номер паспорта")
        .form__field.form__field-passport-division
            label.form__label(for="form-ID-field-passport-division") Код подразделения
            input.form__input(id="form-ID-field-passport-division", type="text", name="passportDivision", data-type="passportDivision", value="", placeholder="Код подразделения")
        .form__field.form__field-snils
            label.form__label(for="form-ID-field-snils") Cнилс
            input.form__input(id="form-ID-field-snils", type="text", name="snils", data-type="snils", value="", placeholder="Cнилс")
        .form__field.form__field-ogrn
            label.form__label(for="form-ID-field-ogrn") ОГРН
            input.form__input(id="form-ID-field-ogrn", type="text", name="ogrn", data-type="ogrn", value="", placeholder="ОГРН")
        .form__field.form__field-ogrnip
            label.form__label(for="form-ID-field-ogrnip") ОГРНИП
            input.form__input(id="form-ID-field-ogrnip", type="text", name="ogrnip", data-type="ogrnip", value="", placeholder="ОГРНИП")
        .form__field.form__field-kpp
            label.form__label(for="form-ID-field-kpp") КПП
            input.form__input(id="form-ID-field-kpp", type="text", name="kpp", data-type="kpp", value="", placeholder="КПП")
        .form__field.form__field-bik
            label.form__label(for="form-ID-field-bik") БИК
            input.form__input(id="form-ID-field-bik", type="text", name="bik", data-type="bik", value="", placeholder="БИК")
        .form__field.form__field-payment-account
            label.form__label(for="form-ID-field-payment-account") Расчетный счет
            input.form__input(id="form-ID-field-payment-account", type="text", name="paymentAccount", data-type="paymentAccount", value="", placeholder="Расчетный счет")
        .form__field.form__field-individual-and-legal-entity-selection
            .form__input-wrapper
                .radio.radio_type_default.radio_theme_default
                    input.form__input.radio__input(id="form-ID-field-individual", type="radio", name="individual-and-legal-entity-selection")
                    label.form__label.radio__label(for="form-ID-field-individual") Физическое лицо
            .form__input-wrapper
                .radio.radio_type_default.radio_theme_default
                    input.form__input.radio__input(id="form-ID-field-legal", type="radio", name="individual-and-legal-entity-selection")
                    label.form__label.radio__label(for="form-ID-field-legal") Юридическое лицо
        .form__field.form__field-agreement-privace-policy
            .checkbox.checkbox_type_default.checkbox_theme_default
                input.form__input.checkbox__input(id="form-ID-field-agreement-privace-policy", type="checkbox", name="agreement-privace-policy", data-type="agreement", data-require)
                label.form__label.checkbox__label(for="form-ID-field-agreement-privace-policy")
                    span Согласен(сна) с условиями <a href="/" target="_blank">политики конфиденциальности</a>.
        .form__field.form__field-agreement-personal-data
            .checkbox.checkbox_type_default.checkbox_theme_default
                input.form__input.checkbox__input(id="form-ID-field-agreement-personal-data", type="checkbox", name="agreement-personal-data", data-type="agreement", data-require)
                label.form__label.checkbox__label(for="form-ID-field-agreement-personal-data")
                    span Согласен(сна) на <a href="/" target="_blank">обработку персональных данных</a>
        .form__field.form__field-rules-agreement.form__field-mailing-consent
            .checkbox.checkbox_type_default.checkbox_theme_default
                input.form__input.checkbox__input(id="form-ID-field-mailing-consent", type="checkbox", name="mailing-consent", data-type="agreement", data-require)
                label.form__label.checkbox__label(for="form-ID-field-mailing-consent")
                    span Согласен(сна) на рассылку
        .form__note
            span *
            |  обязательные для заполнения поля
    .form__actions
        button.form__submit.button.button-primary.button-m(type="submit") Отправить
    
Форма авторизации
от 21.01.2026 15:38
Код
      form.form.form_type_default.form-login(data-form-id="login")
    input(type="hidden", name="g-recaptcha-response", value="")
    .form__fields
        .form__field.form__field-login
            label.form__label(for="form-login-field-login") Логин
            input.form__input(id="form-login-field-login", type="text", name="login", data-type="login", value="", placeholder="Логин", data-require)
        .form__field.form__field-password
            label.form__label(for="form-login-field-password") Пароль
            .form__input-wrapper
                input.form__input(id="form-login-field-password", type="password", name="password", data-type="password", value="", placeholder="Пароль", data-require)
        .form__field.form__field-remember-me
            .checkbox.checkbox_type_default.checkbox_theme_default
                input.form__input.checkbox__input(id="form-login-field-remember-me", type="checkbox", name="remember-me")
                label.form__label.checkbox__label(for="form-login-field-remember-me")
                    span Запомнить меня
        .form__note
            span *
            |  обязательные для заполнения поля
    .form__actions
        button.form__submit.button.button-primary.button-m(type="submit") Войти
        button.form__submit.button.button-primary.button-m(type="button") Зарегистрироваться
    
Форма изменения пароля
от 21.01.2026 15:38
Код
      form.form.form_type_default.form-change-password(data-form-id="change-password")
    input(type="hidden", name="g-recaptcha-response", value="")
    .form__fields
        .form__field.form__field-login
            label.form__label(for="form-change-password-field-login") Логин
            input.form__input(id="form-change-password-field-login", type="text", name="login", data-type="login", value="", placeholder="Логин", data-require)
        .form__field.form__field-password
            label.form__label(for="form-change-password-field-password") Пароль
            .form__input-wrapper
                input.form__input(id="form-change-password-field-password", type="password", name="password", data-type="password", value="", placeholder="Пароль", data-require)
        .form__field.form__field-password-confirm
            label.form__label(for="form-change-password-field-passwordConfirm") Повторите пароль
            .form__input-wrapper
                input.form__input(id="form-change-password-field-passwordConfirm", type="password", name="passwordConfirm", data-type="passwordConfirm", value="", placeholder="Повторите пароль", data-require)
        .form__note
            span *
            |  обязательные для заполнения поля
    .form__actions
        button.form__submit.button.button-primary.button-m(type="submit") Изменить пароль
    

Changelogs

v4.2.0
latest
от 21 Января 2026
  • Переименование названий функций.
  • Проставление * в лейблы чекбоксов.
  • Изменил настройка капчи.
  • Добавлен выбор капчи (google или yandex).
v4.1.1
от 15 Июля 2025
  • Исправление ошибок.
v4.1.0
от 6 Февраля 2025
  • Отображение количества введенных символов.
  • Отображение количества символов сколько осталось ввести.
  • Сделал добавление группы иконок в поле. Теперь иконки счетчика и отображение символов находятся в одном диве.
v4.0.0
от 29 Января 2025
  • Валидация полей (номер и серия паспорта, инн, снилс, огрн, огрнип, кпп, бик, платежный реквизит).
  • Маска для полей (номер и серия паспорта, инн, снилс, огрн, огрнип, кпп, бик, платежный реквизит).
v3.0.0
от 2025
  • Добавлена возможность включать или отключать добавление маски к полю телефона.
  • Включать или отключать блокировку кнопки "отправить" перенесена в настройки.
  • Добавление пометки "*" в лейблы полей и в плейсхолдер.
  • Добавлена валидация для полей: логин, пароль, повторить пароль.
  • Добавлена возможность использования гугл капчи и получение токена. Ключ для капчи указывается в настройках.
  • Изменена маска для телефона.
  • Добавлена возможность отправки данных формы по api.
  • Добавлено открытие попапа при успешной и не успешной отправки формы.
v2.0.0
от 2023
  • Добавлена серилизация полей формы перед отправкой данных на сервер.
v1.0.0
от 2023
  • Валидация полей (телефон, почта, чекбокс политики), а также если поле не заполнено.
  • Блокировка кнопки "отправить" если не заполнены обязательные поля.
  • Отображение класса is-focused у текстового поля.
  • Маска для полей (телефон).