diff --git a/package.json b/package.json index faee1d5..e091b86 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "pd-forms", "title": "pdForms", "description": "Customization of netteForms for use in PeckaDesign.", - "version": "4.0.1", + "version": "4.1.0", "author": "PeckaDesign, s.r.o ", "contributors": [ "Radek Šerý ", diff --git a/src/assets/pdForms.js b/src/assets/pdForms.js index 0038dab..b0fb3f0 100644 --- a/src/assets/pdForms.js +++ b/src/assets/pdForms.js @@ -1,7 +1,7 @@ /** * @name pdForms * @author Radek Šerý - * @version 4.0.1 + * @version 4.1.0 * * Features: * - live validation @@ -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. @@ -644,8 +669,8 @@ } } - if (focusElem) { - focusElem.focus(); + if (errors.length) { + pdForms.afterValidationScroll(form, focusElem); } };