/** * handleForms * * Comportement clavier pour Gravity Forms (wrapper `.gform_wrapper`). * - Intercepte `keydown` (en phase de capture) et bloque Enter partout, * sauf sur: * - `TEXTAREA` (nouvelle ligne autorisée) * - Boutons de soumission (BUTTON[type=submit], INPUT[type=submit]) * - Ajoute une garde au niveau de `submit` (en capture) afin de n'autoriser * la soumission du formulaire que si le focus/le submitter est un bouton submit. * * Objectif * - Éviter les soumissions implicites du formulaire via Enter (ex.: Enter sur * un champ texte ou un SELECT fermé), tout en laissant fonctionner la * soumission explicite via le bouton submit. * * Notes * - Le code n’agit que si l’événement provient d’un élément à l’intérieur * d’un formulaire Gravity Forms: `.gform_wrapper form`. */ export default function handleForms() { function shouldBlockEnter(e) { if (e.key !== 'Enter') return false; const el = e.target; if (!el) return false; const tag = el.tagName; const type = (el.getAttribute && (el.getAttribute('type') || '')).toLowerCase(); // allow new line in textarea if (tag === 'TEXTAREA') return false; // allow explicit submit controls const isSubmitButton = (tag === 'BUTTON' && (type || 'submit') === 'submit') || (tag === 'INPUT' && type === 'submit'); if (isSubmitButton) return false; // block Enter everywhere else to avoid implicit submit (inputs, selects, etc.) return true; } document.addEventListener( 'keydown', (e) => { // only inside Gravity Forms if (e.key !== 'Enter') return; const form = e.target && e.target.closest && e.target.closest('.gform_wrapper form'); if (!form) return; if (shouldBlockEnter(e)) { e.preventDefault(); e.stopPropagation(); } }, true ); // Simple guard: only allow submit if focus/submitter is the submit button document.addEventListener( 'submit', (e) => { const form = e.target; if (!form || !(form.closest && form.closest('.gform_wrapper'))) return; const submitter = e.submitter; const active = document.activeElement; const isActiveSubmit = active && ((active.tagName === 'BUTTON' && (active.getAttribute('type') || 'submit').toLowerCase() === 'submit') || (active.tagName === 'INPUT' && (active.getAttribute('type') || '').toLowerCase() === 'submit')); const isSubmitterFocused = submitter && active && submitter === active; if (!(isActiveSubmit || isSubmitterFocused)) { e.preventDefault(); e.stopPropagation(); } }, true ); }