Riporto direttamente il codice aggiornato:
codice:
document.addEventListener('DOMContentLoaded', function() {
var nomeInput = document.getElementById('nome');
var cognomeInput = document.getElementById('cognome');
var emailInput = document.getElementById('email');
var telefonoInput = document.getElementById('telefono');
var form = document.querySelector('form');
const ERROR_MESSAGE_NOME_COGNOME = "Compila almeno uno dei campi nome / cognome";
const ERROR_MESSAGE_EMAIL_TELEFONO = "Compila almeno uno dei campi email / telefono";
nomeInput.addEventListener('input', toggleNomeCognomeRequired);
cognomeInput.addEventListener('input', toggleNomeCognomeRequired);
emailInput.addEventListener('input', toggleEmailTelefonoRequired);
telefonoInput.addEventListener('input', toggleEmailTelefonoRequired);
function toggleNomeCognomeRequired() {
var nomeValue = nomeInput.value.trim();
var cognomeValue = cognomeInput.value.trim();
if (!nomeValue && !cognomeValue) {
nomeInput.setCustomValidity(ERROR_MESSAGE_NOME_COGNOME);
cognomeInput.setCustomValidity(ERROR_MESSAGE_NOME_COGNOME);
} else {
nomeInput.setCustomValidity('');
cognomeInput.setCustomValidity('');
}
}
function toggleEmailTelefonoRequired() {
var emailValue = emailInput.value.trim();
var telefonoValue = telefonoInput.value.trim();
if (!emailValue && !telefonoValue) {
emailInput.setCustomValidity(ERROR_MESSAGE_EMAIL_TELEFONO);
telefonoInput.setCustomValidity(ERROR_MESSAGE_EMAIL_TELEFONO);
} else {
emailInput.setCustomValidity('');
telefonoInput.setCustomValidity('');
}
}
form.addEventListener('submit', function (event) {
event.preventDefault();
toggleNomeCognomeRequired();
toggleEmailTelefonoRequired();
var isValid = !nomeInput.validity.customError && !cognomeInput.validity.customError &&
!emailInput.validity.customError && !telefonoInput.validity.customError;
if (isValid) {
var formData = new FormData(form);
fetch(form.action, {
method: 'POST',
body: formData,
})
.then(function (response) {
if (response.ok) {
form.reset();
showMessage('success', 'Grazie per averci contattato. Vi risponderemo nel più breve tempo possibile.');
} else {
showMessage('error', 'Si è verificato un errore durante l\'invio del messaggio. Riprova più tardi.');
}
})
.catch(function (error) {
console.error('Error:', error);
});
}
});
function showMessage(suffix, message) {
const overlay = document.createElement('div');
const messageContainer = document.createElement('div');
const messageContent = document.createElement('div');
const btnClose = document.createElement('input');
overlay.classList.add('overlay');
messageContainer.classList.add('message-container', suffix + '-message-container');
messageContent.classList.add(suffix + '-message');
btnClose.classList.add('close-button');
messageContent.innerHTML = message;
btnClose.type = 'button';
btnClose.value = 'Chiudi';
btnClose.addEventListener('click', closeMessage);
messageContainer.appendChild(messageContent);
messageContainer.appendChild(btnClose);
overlay.appendChild(messageContainer);
document.body.appendChild(overlay);
// Fadein
overlay.style = 'opacity: 0; transition: opacity .5s ease-out;';
setTimeout(() => {overlay.style.opacity = '1';}, 0);
}
function closeMessage(e) {
const overlay = e.target.closest('.overlay');
// Fadeout
overlay.style.opacity = '0';
overlay.addEventListener('transitionend', () => {document.body.removeChild(overlay);});
}
});
codice:
.overlay {position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(3, 3, 3, 0.6);
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
z-index: 9999;
display: flex;
justify-content: center;
align-items: center;
opacity: 1;
transition: opacity 0.5s;
}
Funziona tutto bene...sarei disonesto che non ammettessi che mi hai aiutato il mio solito amico Chat Gpt.
Devo dire che la versione 4, che sto usando da qualche tempo, non solo è molto più performante e precisa, ma anche didattica.
Ogni cosa che chiedo non si limita a darmi una risposta ma si sofferma in spiegazioni dettagliate...
Mi sa che alla fine ci lascerà tutti a casa