Untitled
unknown
plain_text
10 months ago
4.1 kB
9
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