UNPKG

modernizr

Version:

Modernizr is a JavaScript library that detects HTML5 and CSS3 features in the user’s browser.

68 lines (57 loc) 2.27 kB
/*! { "name": "Form Validation", "property": "formvalidation", "tags": ["forms", "validation", "attribute"], "builderAliases": ["forms_validation"] } !*/ /* DOC This implementation only tests support for interactive form validation. To check validation for a specific type or a specific other constraint, the test can be combined: - `Modernizr.inputtypes.number && Modernizr.formvalidation` (browser supports rangeOverflow, typeMismatch etc. for type=number) - `Modernizr.input.required && Modernizr.formvalidation` (browser supports valueMissing) */ define(['Modernizr', 'createElement', 'docElement', 'testStyles'], function(Modernizr, createElement, docElement, testStyles) { Modernizr.addTest('formvalidation', function() { var form = createElement('form'); if (!('checkValidity' in form) || !('addEventListener' in form)) { return false; } if ('reportValidity' in form) { return true; } var invalidFired = false; var input; Modernizr.formvalidationapi = true; // Prevent form from being submitted form.addEventListener('submit', function(e) { // Old Presto based Opera does not validate form, if submit is prevented // although Opera Mini servers use newer Presto. if (!window.opera || window.operamini) { e.preventDefault(); } e.stopPropagation(); }, false); // Calling form.submit() doesn't trigger interactive validation, // use a submit button instead //older opera browsers need a name attribute form.innerHTML = '<input name="modTest" required="required" /><button></button>'; testStyles('#modernizr form{position:absolute;top:-99999em}', function(node) { node.appendChild(form); input = form.getElementsByTagName('input')[0]; // Record whether "invalid" event is fired input.addEventListener('invalid', function(e) { invalidFired = true; e.preventDefault(); e.stopPropagation(); }, false); //Opera does not fully support the validationMessage property Modernizr.formvalidationmessage = !!input.validationMessage; // Submit form by clicking submit button form.getElementsByTagName('button')[0].click(); }); return invalidFired; }); });