Skip to content

Commit

Permalink
#1 Úprava scrollování po validování formuláře
Browse files Browse the repository at this point in the history
- Po zvalidování nově scrollujeme podle složitější logiky. Pokud není žádný focusovatelný prvek na základě validace (ale validace má nějaké chyby), přesouváme na začátek formuláře. Pokud máme focusovatelný prvek (první chybný input formuláře), pak pokud není typu hidden a zároveň nemá nastaveno globální umístění zprávy, pak do něj přesouváme focus a prohlížeč zajistí scroll. V případě hidden prvků, nebo prvků s globální validační zprávou scrollujeme přímo na placeholder (nebo formulář).
  • Loading branch information
zipper committed May 6, 2024
1 parent 64e1131 commit fc983e5
Showing 1 changed file with 27 additions and 2 deletions.
29 changes: 27 additions & 2 deletions src/assets/pdForms.js
Original file line number Diff line number Diff line change
Expand Up @@ -594,6 +594,31 @@
}


/**
* Scroll into first error after validation.
*/
pdForms.afterValidationScroll = function (form, firstErrorElem) {
if (! firstErrorElem) {
form.scrollIntoView();
return;
}

var placeholder = pdForms.getMessagePlaceholder(firstErrorElem)

if (placeholder.isGlobal || firstErrorElem.type === 'hidden') {
(placeholder.elem ?? form).scrollIntoView()

firstErrorElem.focus({
preventScroll: true
});

return;
}

firstErrorElem.focus()
}


/**
* Optional rules are defined using "optional" property in "arg". We have to convert arg into Nette format before
* validating. This means removing all properties but data from arg and storing them elsewhere.
Expand Down Expand Up @@ -644,8 +669,8 @@
}
}

if (focusElem) {
focusElem.focus();
if (errors.length) {
pdForms.afterValidationScroll(form, focusElem);
}
};

Expand Down

0 comments on commit fc983e5

Please sign in to comment.