Formulário dinâmico do Interago inserido por JS - Atualizado

Ao colocar no HTML o script ele montará o formulário padrão com o evento de disparo

Novidades: form.js (form_current4.js)

Agora o formulário criado dinamicamente contém campos com um código exclusivo, o que permite a criação de vários formulários na mesma página. Exemplificando, um o campo formNome agora é criado formNome_5323, onde 5323 é um número aleatório. No atributo idata os valores são os campos com o número aleatório.


Novidades: Versão Visits 2.2

*Opção para escolher um e-mail de destino ao invés do e-mail cadastrado na extensão de visitas.

-Para escolher um e-mail de destino basta adicionar o atributo "sendMail" dentro do script form.js, segue exemplo:


<script sendMail="example@email.com" src="https://www.interago.com.br/App/Extensions/1/tag/components/form.js"></script>


Apresentação

O formulário via JS visa burlar os spans, visto que não é um formulário convencional e tornar mais prático sua inserção com garantia de funcionamento em várias páginas com mais agilidade.


Pré-requisitos

👉🏻 Script de Acompanhamento de Visitas (Extensão #1)
👉🏻 O script de visitas precisa estar após o script do formulário
👉🏻 O script do formulário precisa ficar no DOM, exatamente onde ele será montado.
✉️ O formulário pegará o id de cada input com idata e o nome do campo exibido no e-mail está em name. Pode usar espaços, por exemplo



<input class="formInput inputName" type="text" name="Responsável Comercial da Empresa" id="formName" placeholder="Nome"/>


No idata precisa ter formName e o cliente receberá esse campo com o nome Responsável Comercial da Empresa


Customização

👉🏻
Via CSS
👉🏻 A mensagem de obrigado possui:


id=formSuccessfullSend




para customização e o bloqueio de click tem a classe no botão




class=needCheck




Validação ✋✋✋

O formulário padrão valida somente campos em branco, os quais são: Nome, DDD e Celular. Para outros campos ou validações, precisa copiar o código e aplicar a customização .

Como usar

Adicione o código exatamente no HTML onde quer que ele seja exibido:


<script src="https://www.interago.com.br/App/Extensions/1/tag/components/form.js"></script>


Para aceitar anexos, utilize


<script src="https://www.interago.com.br/App/Extensions/1/tag/components/form.js" files maxSize="1" filesRequire="1"></script>


💡 Somente o atributo files é obrigatório; os opcionais:
maxSize = quantos arquivos podem ser enviados;
filesRequire = quantos arquivos são obrigatórios para passar na checagem

💡O arquivo é processado no frontend, nos testes, foi enviado com sucesso onde o total é igual a 20MB

Como ele é exibido:
 


Como o Interago coleta os dados:


👉🏻 Os inputs precisam de um id
👉🏻 Ao invés de um botão de submit, é utilizado um link com tag a
👉🏻
O link não precisa de href, mas precisa do atributo idata
👉🏻
No atributo idata precisam ter todos os ids dos campos separados por vírgula
👉🏻 A soma dos dados do formulário, para ser classificado como lead precisa ter mais do que 150 caracteres


Veja uma demonstração neste link

Veja uma demonstração com arquivos neste link

✉️ Adicione seu e-mail em Extensões > Relatórios > Recebimento de Leads para ver como os e-mails do Interago chegam.

Quer utilizar o formulário manualmente? Veja o código abaixo

HTML simples




<div class="row" id="formContainer"><div class="col-12"><label for="formName">Nome:</label><input class="formInput inputName" type="text" name="Nome" id="formName" placeholder="Nome" style="border: 1px solid rgb(229, 135, 135);"></div><div class="col-12"><input class="formInput formOrigin" type="hidden" name="origem" id="formOrigin" value="Formulário automático para captação de leads"></div><div class="col-12"><label for="formMail">E-mail:</label><input class="formInput inputMail" type="email" name="E-mail" id="formMail" placeholder="E-mail"></div><div class="col-12"><label for="formPhone">Telefone:</label></div><div class="col-3"><input class="formInput inputDDD" type="number" name="DDD" id="formDDD" placeholder="DDD" style="border: 1px solid rgb(229, 135, 135);"></div><div class="col-9"><input class="formInput inputPhone" type="number" name="Celular" id="formPhone" placeholder="Celular" style="border: 1px solid rgb(229, 135, 135);"></div><div class="col-12"><label for="formMessage">Mensagem:</label><textarea class="formTextArea textAreaMessage" name="Mensagem" id="formMessage"></textarea></div><div class="col-12"><a class="formLink submitLink needCheck" idata="formOrigin, formName, formMail, formDDD, formPhone, formMessage" id="formSendButton">Enviar</a></div></div>

HTML com exemplo de campos com variáveis, para ser usado mais de um formulário por página (o valor CODIGO precisa ser exclusivo para cada formulário) - lembre-se que os ids sempre precisam ser exclusivos, inclusive, do botão de enviar para validação. Não altere o atributo name.


<div class="row" id="formContainer"><div class="col-12"><label for="formName">Nome:</label><input class="formInput inputName" type="text" name="Nome" id="formName_CODIGO" placeholder="Nome" style="border: 1px solid rgb(229, 135, 135);"></div><div class="col-12"><input class="formInput formOrigin" type="hidden" name="origem" id="formOrigin_CODIGO" value="Formulário automático para captação de leads"></div><div class="col-12"><label for="formMail">E-mail:</label><input class="formInput inputMail" type="email" name="E-mail" id="formMail_CODIGO" placeholder="E-mail"></div><div class="col-12"><label for="formPhone">Telefone:</label></div><div class="col-3"><input class="formInput inputDDD" type="number" name="DDD" id="formDDD_CODIGO" placeholder="DDD" style="border: 1px solid rgb(229, 135, 135);"></div><div class="col-9"><input class="formInput inputPhone" type="number" name="Celular" id="formPhone_CODIGO" placeholder="Celular" style="border: 1px solid rgb(229, 135, 135);"></div><div class="col-12"><label for="formMessage">Mensagem:</label><textarea class="formTextArea textAreaMessage" name="Mensagem" id="formMessage_CODIGO"></textarea></div><div class="col-12"><a class="formLink submitLink needCheck" idata="formOrigin_CODIGO, formName_CODIGO, formMail_CODIGO, formDDD_CODIGO, formPhone_CODIGO, formMessage_CODIGO" id="formSendButton_CODIGO">Enviar</a></div></div>



Estilo padrão



<style>#formContainer{grid-gap:10px;}.formInput::placeholder{font-family: Arial, FontAwesome;font-style: normal;font-weight: normal;text-decoration: inherit;}.formInput, .formTextArea, .formLink{ width:100%; display:block; font-family:arial; padding:10px;} .formLink {text-align:center; cursor:pointer; background-color:#15785c; color:white;} .needCheck{ pointer-events:none; background-color:#6c6c6c;}</style>

JS com as validações



let formSendButton = document.getElementById("formSendButton");

let formName = document.querySelector('#formName');
let formDDD = document.querySelector('#formDDD');
let formPhone = document.querySelector('#formPhone');

formName.addEventListener('focusout', checkEmpty);
formDDD.addEventListener('focusout', checkEmpty);
formPhone.addEventListener('focusout', checkEmpty);

//send form main event
formSendButton.addEventListener("click", (e) => {
  if (checkEmpty() != false) {
    
    //all cool to send
    document.querySelector('#formSendButton').innerHTML = 'Enviando...';
    document.querySelector('#formSendButton').classList.add('needCheck');

    setTimeout(function () {
      document.getElementById("formContainer").innerHTML =
        '<div class="col-12"><p id="formSuccessfullSend">Sua mensagem foi enviada com sucesso. Obrigado! Em breve retornaremos seu contato.</p></div>';
    }, 1500);
  }
});
//simple check empty
function checkEmpty() {
  let errorBorderColor = "1px solid #e58787";
  let okBorderColor = "1px solid #dedede";
  let nome = document.getElementById("formName");
  let ddd = document.getElementById("formDDD");
  let phone = document.getElementById("formPhone");
  let valid = true;

  if (nome.value === "") {
    nome.style.border = errorBorderColor;
    valid = false;
  } else {
    nome.style.border = okBorderColor;
    console.log("ok");
  }
  if (ddd.value === "") {
    ddd.style.border = errorBorderColor;
    valid = false;
  } else {
    ddd.style.border = okBorderColor;
  }
  if (phone.value === "") {
    phone.style.border = errorBorderColor;
    valid = false;
  } else {
    phone.style.border = okBorderColor;
  }

    if(valid == true) {
        document.querySelector('#formSendButton').classList.remove('needCheck');
    }
    else {
        if(document.querySelector('#formSendButton').classList.contains('needCheck') == false) {
            document.querySelector('#formSendButton').classList.add('needCheck');
        }
    }
  return valid;
}

Código do script com arquivos (form_current3.js) - o script de produção é minificado


//get element outside
var scriptTag = document.querySelectorAll(
 '[src="https://www.interago.com.br/App/Extensions/1/tag/components/form.js"]'
 )[0];
 
 var parentTag = scriptTag.parentNode;
 var iDataFiles = '';
 
 //render form
 let render =
 '<div class="row" id="formContainer"><div class="col-12 formContainerName"><label for="formName">Nome:</label><input class="formInput inputName" type="text" name="Nome" id="formName" placeholder="Nome"/></div>';
 render +=
 '<div class="col-12 formContainerOrigin"><input class="formInput formOrigin" type="hidden" name="origem" id="formOrigin" value="Formulário automático para captação de leads"/></div>';
 render +=
 '<div class="col-12 formContainerEmail"><label for="formMail">E-mail:</label><input class="formInput inputMail" type="email" name="E-mail" id="formMail" placeholder="E-mail"/></div>';
 render +=
 '<div class="col-12 formContainerDDD"><label for="formPhone">Telefone:</label></div><div class="col-3"><input class="formInput inputDDD" type="number" name="DDD" id="formDDD" placeholder="DDD"/></div>';
 render +=
 '<div class="col-9 formContainerPhone"><input class="formInput inputPhone" type="number" name="Celular" id="formPhone" placeholder="Celular"/></div>';
 render +=
 '<div class="col-12 formContainerMessage"><label for="formMessage">Mensagem:</label><textarea class="formTextArea textAreaMessage" name="Mensagem" id="formMessage"></textarea></div>';
 
 if(scriptTag.hasAttribute('files')) {
 
 let maxFiles = 1;
 let filesRequire =0;
 let filesRequireMsg = '';
 let mime = "png,jpg,jpeg,webp,pdf,heic,docx,";
 
 if(scriptTag.hasAttribute('maxSize')) {
 maxFiles = parseInt(scriptTag.getAttribute('maxSize'));
 if(maxFiles > 5) { maxFiles = 5};
 }
 if(scriptTag.hasAttribute('filesRequire')) {
 filesRequire = parseInt(scriptTag.getAttribute('filesRequire'));
 filesRequire == 1 ? filesRequireMsg = '<p id="requireFileMsg">É obrigatório enviar 1 arquivo</p>' : filesRequireMsg = '<p id="requireFileMsg">É obrigatório enviar '+filesRequire+' arquivos</p>';
 }
 
 if(maxFiles == 1) {
 render += '<div class="col-12" id="formFilesContainer"><label id="formFilesLabel">Enviar arquivo (imagem ou pdf)</label>';
 }
 else {
 render += '<div class="col-12" id="formFilesContainer"><label id="formFilesLabel">Enviar arquivos (imagens, pdfs ou word)</label>';
 }
 
 render += filesRequireMsg;
 
 for(i = 0; i < maxFiles; i++) {
 render += '<input class="formFilesInputs" id="formFilesInput_'+i+'" type="file" accept="image/png, image/jpeg, image,jpg, application/pdf, application/msword, image/heic" name="file_'+i+'" />\
 <input type="hidden" name="file64_'+i+'" id="file64_'+i+'"/>';
 
 iDataFiles += ', file64_'+i;
 
 }
 render += '</div>';
 }
 else {
 //console.log('not have files');
 } 
 
 
 
 render +=
 '<div class="col-12 formContainerButton"><a class="formLink submitLink needCheck" idata="formOrigin, formName, formMail, formDDD, formPhone, formMessage '+iDataFiles+'" id="formSendButton">Enviar</a></div></div>';
 
 //basic styles
 render +=
 "<style>#formContainer{grid-gap:10px;}.formInput::placeholder{font-family: Arial, FontAwesome;font-style: normal;font-weight: normal;text-decoration: inherit;}.formInput, .formTextArea, .formLink{ width:100%; display:block; font-family:arial; padding:10px;} .formLink {text-align:center; cursor:pointer; background-color:#15785c; color:white;} .needCheck{ pointer-events:none; background-color:#6c6c6c;}.formFilesInputs{display:flex; margin:3px;}</style>";
 
 parentTag.insertAdjacentHTML("afterbegin", render);
 
 //refresh container with message
 let formSendButton = document.getElementById("formSendButton");
 
 let formName = document.querySelector('#formName');
 let formDDD = document.querySelector('#formDDD');
 let formPhone = document.querySelector('#formPhone');
 
 formName.addEventListener('keyup', checkEmpty);
 formDDD.addEventListener('keyup', checkEmpty);
 formPhone.addEventListener('keyup', checkEmpty);
 
 var filesCheck = document.getElementsByClassName('formFilesInputs');
 if(filesCheck.length > 0) {
 for(var j = 0; j < filesCheck.length; j++) {
 let element = filesCheck[j];
 if (typeof(element) != 'undefined' && element != null) {
 filesCheck[j].addEventListener('change', checkEmpty);
 }
 }
 }
 
 //send form main event
 formSendButton.addEventListener("click", (e) => {
 if (checkEmpty() != false) {
 
 //all cool to send
 document.querySelector('#formSendButton').innerHTML = 'Enviando...';
 document.querySelector('#formSendButton').classList.add('needCheck');
 
 setTimeout(function () {
 document.getElementById("formContainer").innerHTML =
 '<div class="col-12"><p id="formSuccessfullSend">Sua mensagem foi enviada com sucesso. Obrigado! Em breve retornaremos seu contato.</p></div>';
 }, 2000);
 }
 });
 //simple check empty
 function checkEmpty() {
 let errorBorderColor = "1px solid #e58787";
 let okBorderColor = "1px solid #dedede";
 let nome = document.getElementById("formName");
 let ddd = document.getElementById("formDDD");
 let phone = document.getElementById("formPhone");
 let valid = true;
 
 if (nome.value === "") {
 nome.style.border = errorBorderColor;
 valid = false;
 } else {
 nome.style.border = okBorderColor;
 console.log("ok");
 }
 if (ddd.value === "") {
 ddd.style.border = errorBorderColor;
 valid = false;
 } else {
 ddd.style.border = okBorderColor;
 }
 console.log(phone.value.length);
 if(phone.value.length < 7) {
 phone.style.border = errorBorderColor;
 valid = false;
 } else {
 phone.style.border = okBorderColor;
 }
 
 var filesCheck = document.getElementsByClassName('formFilesInputs');
 
 if(filesCheck.length > 0) {
 let aux = 0;
 for(var j = 0; j < filesCheck.length; j++) {
 if(filesCheck[j].files.length != 0) {
 let reader = new FileReader();
 reader.readAsDataURL(filesCheck[j].files[0]);
 filesCheck[j].setAttribute('processing', j);
 
 reader.onload = function(e) {
 document.getElementById('file64_'+aux).value = reader.result;
 aux++;
 }
 
 }
 }
 
 
 
 if(scriptTag.hasAttribute('filesRequire')) {
 filesRequire = parseInt(scriptTag.getAttribute('filesRequire'));
 if(filesRequire != 0) {
 inputWithFiles = 0;
 for(var j = 0; j < filesCheck.length; j++) {
 let element = filesCheck[j];
 if (typeof(element) != 'undefined' && element != null)
 {
 if(filesCheck[j].files.length === 0) {
 
 }
 else {
 inputWithFiles++;
 }
 }
 }
 /*
 
 }*/
 if(inputWithFiles >= filesRequire) {
 document.getElementById('formFilesContainer').style.border = 'none';
 }
 else {
 valid = false;
 document.getElementById('formFilesContainer').style.border = errorBorderColor;
 }
 }
 }
 }
 
 if(valid == true) {
 document.querySelector('#formSendButton').classList.remove('needCheck');
 }
 else {
 if(document.querySelector('#formSendButton').classList.contains('needCheck') == false) {
 document.querySelector('#formSendButton').classList.add('needCheck');
 }
 }
 return valid;
 }
 
 



Você também pode gostar de ler

Adicionando contatos no Mailing da Eco WD

Em 19/02/2025 às 09h50 - Atualizado em 19/02/2025 às 09h52

CRM E-mail Marketing

Em 12/03/2024 às 09h06 - Atualizado em 12/03/2024 às 15h46

Script de conversão de formulário para mensagem de WhatsApp

Em 22/07/2022 às 10h58 - Atualizado em 16/08/2022 às 09h09