||

Como adicionar campo ‘outro’ condicional no formulário do elementor free (css + javascript)

Como adicionar um campo de texto, que fique oculto no formulário e que só fique visível se o usuário escolher a opção OUTRO na listagem do checkbox ou radiobox.

Primeiro, crie o campo do checkbox e nas opções avançadas, coloque o ID correspondente.

No campo logo abaixo, crie um campo Text e coloque o id algo correspondente ao nome do checkbox.

Exemplo:
CHECKBOX

CAMPO DE TEXTO “OUTRO

Agora é necessário incluir o CSS (nas opções avançadas do formulário)
obs: Caso você não tenha o Elementor Pro, procure no google a opção chamada PRO ELEMENTS, ele vai desbloquear alguns recursos do elementor.

O elementor cria um ‘nome’ para os campos dos formulários, no meu caso eles ficaram assim, então meu CSS precisou ficar desse jeito.

.elementor-field-group-desafio_outro,
.elementor-field-group-departamento_outro,
.elementor-field-group-cargo_outro,
.elementor-field-group-como_outro {
  display: none;
}

Note que no css acima, está o código que usei para outros campos, OK?

Depois de tudo isso pronto, basta adicionar um widget de html embaixo do formulário e inserir o javascript

<script>
jQuery(document).ready(function($) {
    const campos = [
        {
            tipo: 'checkbox',
            nome: 'desafio',
            outro: 'desafio_outro'
        },
        {
            tipo: 'checkbox',
            nome: 'departamento',
            outro: 'departamento_outro'
        },
        {
            tipo: 'radio',
            nome: 'cargo',
            outro: 'cargo_outro'
        },
        {
            tipo: 'radio',
            nome: 'como',
            outro: 'como_outro'
        }
    ];

    function inicializarCampos() {
        campos.forEach(campo => {
            // Esconde o campo "outro" inicialmente (CSS já faz, mas garantimos)
            $(`.elementor-field-group-${campo.outro}`).hide();

            if (campo.tipo === 'checkbox') {
                // Checkbox: mostra/esconde ao marcar/desmarcar "Outro"
                $(`input[name="form_fields[${campo.nome}][]"][value="Outro"]`).on('change', function() {
                    const outroField = $(`.elementor-field-group-${campo.outro}`);
                    const outroInput = outroField.find('input');
                    if ($(this).is(':checked')) {
                        outroField.slideDown();
                        outroInput.prop('required', true);
                    } else {
                        outroField.slideUp();
                        outroInput.prop('required', false).val('');
                    }
                });
                // Estado inicial ao carregar a página
                if ($(`input[name="form_fields[${campo.nome}][]"][value="Outro"]`).is(':checked')) {
                    $(`.elementor-field-group-${campo.outro}`).show();
                    $(`.elementor-field-group-${campo.outro} input`).prop('required', true);
                }
            } else {
                // Radio: mostra/esconde ao selecionar "Outro"
                $(`input[name="form_fields[${campo.nome}]"]`).on('change', function() {
                    const outroField = $(`.elementor-field-group-${campo.outro}`);
                    const outroInput = outroField.find('input');
                    if ($(this).val() === 'Outro' && $(this).is(':checked')) {
                        outroField.slideDown();
                        outroInput.prop('required', true);
                    } else if ($(this).is(':checked')) {
                        outroField.slideUp();
                        outroInput.prop('required', false).val('');
                    }
                });
                // Estado inicial ao carregar a página
                const checked = $(`input[name="form_fields[${campo.nome}]"]:checked`);
                if (checked.length && checked.val() === 'Outro') {
                    $(`.elementor-field-group-${campo.outro}`).show();
                    $(`.elementor-field-group-${campo.outro} input`).prop('required', true);
                }
            }
        });
    }

    function validarFormulario() {
        $('.elementor-form').on('submit', function(e) {
            let formValido = true;
            campos.forEach(campo => {
                if (campo.tipo === 'checkbox') {
                    if ($(`input[name="form_fields[${campo.nome}][]"][value="Outro"]`).is(':checked')) {
                        const outroInput = $(`.elementor-field-group-${campo.outro} input`);
                        if (!outroInput.val().trim()) {
                            formValido = false;
                            alert('Por favor, preencha todos os campos "Outro" selecionados');
                            outroInput.focus();
                            return false;
                        }
                    }
                } else {
                    const radioSelecionado = $(`input[name="form_fields[${campo.nome}]"]:checked`).val();
                    const outroInput = $(`.elementor-field-group-${campo.outro} input`);
                    if (radioSelecionado === 'Outro' && !outroInput.val().trim()) {
                        formValido = false;
                        alert('Por favor, preencha todos os campos "Outro" selecionados');
                        outroInput.focus();
                        return false;
                    }
                }
            });
            if (!formValido) {
                e.preventDefault();
            }
        });
    }

    inicializarCampos();
    validarFormulario();
});
</script>

Resultado:

A opção outro irá aparecer no checkbox ou radiobox e quando o usuário escolher, vai abrir o campo de texto para ele digitar

Algumas considerações: O valor da opção “Outro” deve ser exatamente “Outro”.

Eu consegui resolver esse problema usando minha assistente de IA chamada Mônica, vocês já conhecem?

Compartilhe
Facebook
Twitter
LinkedIn

Categorias

Alguma
Dúvida?

let’s get to work