VOTRE DIAGNOSTIC COMMUNICATION PERSONNALISÉ
(function () {
var FORM_ID = 1;
function getHeaderOffset() {
// On prend le plus "logique" (Elementor header sticky / header)
var candidates = [
document.querySelector('[data-elementor-type="header"] .elementor-sticky--active'),
document.querySelector('.elementor-sticky--active'),
document.querySelector('header'),
document.querySelector('.site-header')
].filter(Boolean);
// Prend la hauteur max trouvée
var h = 0;
candidates.forEach(function(el){
var r = el.getBoundingClientRect();
if (r.height > h) h = r.height;
});
return h + 16; // marge de confort
}
function scrollToFirstError() {
var wrapper = document.querySelector('#gform_wrapper_' + FORM_ID);
if (!wrapper) return;
// Champ en erreur (le plus fiable : .gfield_error)
var firstError = wrapper.querySelector('.gfield_error');
if (!firstError) {
// fallback : bloc d'erreurs global GF
firstError = wrapper.querySelector('.gform_validation_errors, .validation_error');
}
if (!firstError) return;
var offset = getHeaderOffset();
var y = firstError.getBoundingClientRect().top + window.pageYOffset - offset;
// Double RAF = laisse le navigateur finir layout + scripts, puis scroll propre
requestAnimationFrame(function () {
requestAnimationFrame(function () {
window.scrollTo({ top: y, behavior: 'auto' });
});
});
}
function afterAttempt() {
// Laisse GF poser les erreurs, puis on scroll après
setTimeout(scrollToFirstError, 120);
setTimeout(scrollToFirstError, 350); // seconde passe au cas où un autre script rescrolle
}
// 1) Au clic sur "Suivant" (pagination)
document.addEventListener('click', function (e) {
var btn = e.target.closest('#gform_wrapper_' + FORM_ID + ' .gform_next_button');
if (!btn) return;
afterAttempt();
});
// 2) Au clic sur "Envoyer" (dernière page)
document.addEventListener('click', function (e) {
var btn = e.target.closest('#gform_wrapper_' + FORM_ID + ' .gform_button');
if (!btn) return;
afterAttempt();
});
// 3) Si GF déclenche ses events (bonus)
document.addEventListener('gform_page_loaded', function (e) {
if (e.detail && String(e.detail.form_id) === String(FORM_ID)) {
afterAttempt();
}
});
document.addEventListener('gform_post_render', function (e) {
if (e.detail && String(e.detail.formId) === String(FORM_ID)) {
afterAttempt();
}
});
})();