||

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