Deteccion de cambios incluyendo select, input, textarea y checkbox

This commit is contained in:
imnavajas
2024-02-05 22:15:35 +01:00
parent b328a7c5af
commit a334ac6842

View File

@ -117,7 +117,7 @@
<?= $this->section("additionalInlineJs") ?> <?= $this->section("additionalInlineJs") ?>
// Obtener todos los campos de entrada del formulario // Obtener todos los campos de entrada del formulario
const formInputs = document.querySelectorAll('input, textarea'); const formInputs = document.querySelectorAll('input, textarea, select');
//console.log(formInputs) //console.log(formInputs)
@ -126,30 +126,50 @@
// Guardar los valores originales // Guardar los valores originales
formInputs.forEach(function(input) { formInputs.forEach(function(input) {
originalValues[input.id] = input.type === 'checkbox' ? input.checked : input.value; if (input.type === 'checkbox') {
originalValues[input.id] = input.checked;
} else {
originalValues[input.id] = input.tagName.toLowerCase() === 'select'
? $(input).val() // jQuery para obtener el valor de un select2
: input.value;
}
}); });
console.log(originalValues)
// Agregar un evento de cambio a cada campo de entrada // Agregar un evento de cambio a cada campo de entrada
formInputs.forEach(function(input) { formInputs.forEach(function(input) {
console.log(input.type) if (input.tagName.toLowerCase() === 'select' && $(input).data('select2')) {
// Para elementos select2
$(input).on('change', function() {
verificarCambios();
});
} else {
// Para otros tipos de campos
input.addEventListener('input', function() { input.addEventListener('input', function() {
//console.log(input.value) verificarCambios();
});
}
});
function verificarCambios() {
// Verificar si hay cambios con respecto a los originales // Verificar si hay cambios con respecto a los originales
const cambiosDetectados = Array.from(formInputs).some(function(input) { var cambiosDetectados = Array.from(formInputs).some(function(input) {
return input.type === 'checkbox' ? return input.type === 'checkbox'
input.checked !== originalValues[input.id] : ? input.checked !== originalValues[input.id]
input.value !== originalValues[input.id]; : input.tagName.toLowerCase() === 'select'
? $(input).val() !== originalValues[input.id]
: input.value !== originalValues[input.id];
}); });
// Mostrar alerta solo si hay cambios // Mostrar alerta solo si hay cambios
if (cambiosDetectados) { if (cambiosDetectados) {
showBreadCrumbSaveButton(true); showBreadCrumbSaveButton(true);
console.log('¡Se detectaron cambios!');
}else{ }else{
showBreadCrumbSaveButton(false); showBreadCrumbSaveButton(false);
} }
}); }
});
<?= $this->endSection() ?> <?= $this->endSection() ?>