Untitled

 avatar
unknown
plain_text
3 months ago
4.1 kB
3
Indexable
<script>
(function() {
  // Função para coletar os dados do formulário do Wix
  function getFormData() {
    var formData = {};
    var formRoot = document.querySelector('[data-hook="form-root"]');
    if (!formRoot) return formData;
    
    // Coleta todos os inputs, exceto os de tipo "file"
    var inputs = formRoot.querySelectorAll('input:not([type="file"])');
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      var type = input.getAttribute('type');
      // Usa o atributo aria-label como chave; se não houver, usa o id ou um fallback
      var key = input.getAttribute('aria-label') || input.id || ('input_' + i);
      
      if (type === 'radio') {
        if (input.checked) {
          formData[key] = input.value;
        }
      } else if (type === 'checkbox') {
        if (input.checked) {
          if (!formData[key]) {
            formData[key] = [];
          }
          formData[key].push(input.value);
        }
      } else {
        formData[key] = input.value;
      }
    }
    
    // Coleta os campos textarea, se houver
    var textareas = formRoot.querySelectorAll('textarea');
    for (var j = 0; j < textareas.length; j++) {
      var textarea = textareas[j];
      var key = textarea.getAttribute('aria-label') || textarea.id || ('textarea_' + j);
      formData[key] = textarea.value;
    }
    
    return formData;
  }
  
  // Função para enviar os dados para o dataLayer
  function pushToDataLayer(formName, formData) {
    window.dataLayer = window.dataLayer || [];
    window.dataLayer.push({
      'event': 'gtm.formSubmit', // Nome customizado do evento
      'eventCategory': 'Form Submit',
      'formName': formName,
      'formData': formData
    });
  }
  
  // Função para verificar se todos os campos obrigatórios estão preenchidos
  function areRequiredFieldsFilled() {
    var formRoot = document.querySelector('[data-hook="form-root"]');
    if (!formRoot) return false;
    
    // Verifica inputs e textareas que tenham o atributo "required"
    var requiredFields = formRoot.querySelectorAll('input[required], textarea[required]');
    for (var i = 0; i < requiredFields.length; i++) {
      var field = requiredFields[i];
      var type = field.getAttribute('type');
      if (type === 'radio') {
        // Se for radio, verifica se algum dos inputs com o mesmo nome está selecionado
        if (!formRoot.querySelector('input[name="' + field.name + '"]:checked')) {
          return false;
        }
      } else if (type === 'checkbox') {
        if (!field.checked) {
          return false;
        }
      } else {
        if (field.value.trim() === '') {
          return false;
        }
      }
    }
    
    // Verifica o grupo de rádio que não possui o atributo "required" individualmente (ex.: Estado civil)
    var estadoCivilContainer = formRoot.querySelector('[data-hook="form-field-estado_civil"]');
    if (estadoCivilContainer && !estadoCivilContainer.querySelector('input[type="radio"]:checked')) {
      return false;
    }
    
    return true;
  }
  
  // Função para observar o clique no botão de envio
  function observeFormSubmission() {
    // Seleciona o botão de envio pelo atributo data-hook usado no Wix
    var sendButton = document.querySelector('[data-hook="submit-button"]');
    if (sendButton) {
      sendButton.addEventListener('click', function() {
        // Se todos os campos obrigatórios estiverem preenchidos...
        if (areRequiredFieldsFilled()) {
          var formData = getFormData();
          // Altere "Wix Form" para o nome que desejar identificar o formulário
          pushToDataLayer('Wix Form', formData);
        }
      });
    }
  }
  
  // Executa a observação após o carregamento do DOM
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', observeFormSubmission);
  } else {
    observeFormSubmission();
  }
})();
</script>
Editor is loading...
Leave a Comment