1+ 'use strict'
2+
3+ const InitializeFormCheck = ( ) => {
4+ let pattern = / ^ [ + ] * [ ( ] { 0 , 1 } [ 0 - 9 ] { 1 , 3 } [ ) ] { 0 , 1 } [ - \s \. / 0 - 9 ] * $ / g;
5+ var checkForms = document . querySelectorAll ( '[wt-formcheck-element="form"]' ) ;
6+ if ( ! checkForms || checkForms . length === 0 ) return ;
7+ for ( var form of checkForms ) {
8+ var errorClass = form . getAttribute ( "wt-formcheck-class" ) ;
9+ var submitMessage = form . getAttribute ( "wt-formcheck-message" ) ;
10+ var requiredFields = form . querySelectorAll ( '[wt-formcheck-type="required"]' ) ;
11+ var errorElements = form . querySelectorAll ( '[wt-formcheck-type="error"]' ) ;
12+ var submitButton = form . querySelector ( '[wt-formcheck-type="submit"]' ) ;
13+ var requiredFieldsAndCheckboxes = form . querySelectorAll ( '[wt-formcheck-type="required"], [type="checkbox"]' ) ;
14+ var formErrors = false ;
15+
16+ for ( let element of errorElements ) {
17+ element . style . display = 'none' ;
18+ }
19+
20+ for ( var field of requiredFields ) {
21+ field . classList . remove ( `${ errorClass } ` ) ;
22+ } ;
23+
24+ let fieldError = ( field ) => {
25+ field . parentNode . querySelector ( '[wt-formcheck-type="error"]' ) . style . display = 'block' ;
26+ field . classList . add ( `${ errorClass } ` ) ;
27+ formErrors = true ;
28+ }
29+
30+ for ( var field of requiredFieldsAndCheckboxes ) {
31+ field . addEventListener ( 'keypress' , ( e ) => {
32+ if ( errorClass ) e . target . classList . remove ( `${ errorClass } ` ) ;
33+ e . target . parentNode . querySelector ( '[wt-formcheck-type="error"]' ) . style . display = 'none' ;
34+ formErrors = false ;
35+ } ) ;
36+
37+ field . addEventListener ( 'blur' , ( e ) => {
38+ if ( errorClass ) e . target . classList . remove ( `${ errorClass } ` ) ;
39+ e . target . parentNode . querySelector ( '[wt-formcheck-type="error"]' ) . style . display = 'none' ;
40+ formErrors = false ;
41+ } ) ;
42+ } ;
43+
44+ submitButton . addEventListener ( 'click' , ( ) => {
45+ formErrors = false ;
46+ for ( let field of requiredFields ) {
47+ if ( field . getAttribute ( 'type' ) === 'checkbox' && ! field . checked ) {
48+ fieldError ( field . nextElementSibling ) ;
49+ } else if ( field . value . trim ( ) === '' ) {
50+ fieldError ( field ) ;
51+ } else if ( field . getAttribute ( 'type' ) === 'email' && ( field . value . indexOf ( '@' ) === - 1 || field . value . indexOf ( '.' ) === - 1 ) ) {
52+ fieldError ( field ) ;
53+ } else if ( field . getAttribute ( 'type' ) === 'number' && field . value . trim ( ) === '' && ! isNaN ( field . value . trim ( ) ) ) {
54+ fieldError ( field ) ;
55+ } else if ( field . getAttribute ( 'type' ) === 'tel' && ! field . value . match ( pattern ) ) {
56+ fieldError ( field ) ;
57+ }
58+ } ;
59+
60+ if ( ! formErrors ) {
61+ submitButton . textContent = `${ submitMessage } ` ;
62+ form . submit ( ) ;
63+ }
64+ } ) ;
65+ }
66+ }
67+
68+ document . addEventListener ( "DOMContentLoaded" , InitializeFormCheck ) ;
0 commit comments