@@ -57,6 +57,7 @@ $.fn.form = function(parameters) {
57
57
metadata ,
58
58
selector ,
59
59
className ,
60
+ regExp ,
60
61
error ,
61
62
62
63
namespace ,
@@ -233,6 +234,20 @@ $.fn.form = function(parameters) {
233
234
;
234
235
} ,
235
236
237
+ determine : {
238
+ isValid : function ( ) {
239
+ var
240
+ allValid = true
241
+ ;
242
+ $ . each ( validation , function ( fieldName , field ) {
243
+ if ( ! ( module . validate . field ( field , fieldName , true ) ) ) {
244
+ allValid = false ;
245
+ }
246
+ } ) ;
247
+ return allValid ;
248
+ }
249
+ } ,
250
+
236
251
is : {
237
252
bracketedRule : function ( rule ) {
238
253
return ( rule . type && rule . type . match ( settings . regExp . bracket ) ) ;
@@ -251,17 +266,23 @@ $.fn.form = function(parameters) {
251
266
blank : function ( $field ) {
252
267
return $ . trim ( $field . val ( ) ) === '' ;
253
268
} ,
254
- valid : function ( ) {
269
+ valid : function ( field ) {
255
270
var
256
271
allValid = true
257
272
;
258
- module . verbose ( 'Checking if form is valid' ) ;
259
- $ . each ( validation , function ( fieldName , field ) {
260
- if ( ! ( module . validate . field ( field , fieldName ) ) ) {
261
- allValid = false ;
262
- }
263
- } ) ;
264
- return allValid ;
273
+ if ( field ) {
274
+ module . verbose ( 'Checking if field is valid' , field ) ;
275
+ return module . validate . field ( validation [ field ] , field , false ) ;
276
+ }
277
+ else {
278
+ module . verbose ( 'Checking if form is valid' ) ;
279
+ $ . each ( validation , function ( fieldName , field ) {
280
+ if ( ! module . is . valid ( fieldName ) ) {
281
+ allValid = false ;
282
+ }
283
+ } ) ;
284
+ return allValid ;
285
+ }
265
286
}
266
287
} ,
267
288
@@ -338,7 +359,7 @@ $.fn.form = function(parameters) {
338
359
$fieldGroup = $field . closest ( $group ) ,
339
360
validationRules = module . get . validation ( $field )
340
361
;
341
- if ( settings . on == 'change' || ( $fieldGroup . hasClass ( className . error ) && settings . revalidate ) ) {
362
+ if ( validationRules && ( settings . on == 'change' || ( $fieldGroup . hasClass ( className . error ) && settings . revalidate ) ) ) {
342
363
clearTimeout ( module . timer ) ;
343
364
module . timer = setTimeout ( function ( ) {
344
365
module . debug ( 'Revalidating field' , $field , module . get . validation ( $field ) ) ;
@@ -465,6 +486,7 @@ $.fn.form = function(parameters) {
465
486
metadata = settings . metadata ;
466
487
selector = settings . selector ;
467
488
className = settings . className ;
489
+ regExp = settings . regExp ;
468
490
error = settings . error ;
469
491
moduleNamespace = 'module-' + namespace ;
470
492
eventNamespace = '.' + namespace ;
@@ -477,7 +499,8 @@ $.fn.form = function(parameters) {
477
499
} ,
478
500
field : function ( identifier ) {
479
501
module . verbose ( 'Finding field with identifier' , identifier ) ;
480
- if ( $field . filter ( '#' + identifier ) . length > 0 ) {
502
+ identifier = module . escape . string ( identifier ) ;
503
+ if ( $field . filter ( '#' + identifier ) . length > 0 ) {
481
504
return $field . filter ( '#' + identifier ) ;
482
505
}
483
506
else if ( $field . filter ( '[name="' + identifier + '"]' ) . length > 0 ) {
@@ -592,10 +615,11 @@ $.fn.form = function(parameters) {
592
615
593
616
field : function ( identifier ) {
594
617
module . verbose ( 'Checking for existence of a field with identifier' , identifier ) ;
618
+ identifier = module . escape . string ( identifier ) ;
595
619
if ( typeof identifier !== 'string' ) {
596
620
module . error ( error . identifier , identifier ) ;
597
621
}
598
- if ( $field . filter ( '#' + identifier ) . length > 0 ) {
622
+ if ( $field . filter ( '#' + identifier ) . length > 0 ) {
599
623
return true ;
600
624
}
601
625
else if ( $field . filter ( '[name="' + identifier + '"]' ) . length > 0 ) {
@@ -609,6 +633,13 @@ $.fn.form = function(parameters) {
609
633
610
634
} ,
611
635
636
+ escape : {
637
+ string : function ( text ) {
638
+ text = String ( text ) ;
639
+ return text . replace ( regExp . escape , '\\$&' ) ;
640
+ }
641
+ } ,
642
+
612
643
add : {
613
644
prompt : function ( identifier , errors ) {
614
645
var
@@ -794,7 +825,7 @@ $.fn.form = function(parameters) {
794
825
795
826
// reset errors
796
827
formErrors = [ ] ;
797
- if ( module . is . valid ( ) ) {
828
+ if ( module . determine . isValid ( ) ) {
798
829
module . debug ( 'Form has no validation errors, submitting' ) ;
799
830
module . set . success ( ) ;
800
831
if ( ignoreCallbacks !== true ) {
@@ -818,7 +849,16 @@ $.fn.form = function(parameters) {
818
849
} ,
819
850
820
851
// takes a validation object and returns whether field passes validation
821
- field : function ( field , fieldName ) {
852
+ field : function ( field , fieldName , showErrors ) {
853
+ showErrors = ( showErrors !== undefined )
854
+ ? showErrors
855
+ : true
856
+ ;
857
+ if ( typeof field == 'string' ) {
858
+ module . verbose ( 'Validating field' , field ) ;
859
+ fieldName = field ;
860
+ field = validation [ field ] ;
861
+ }
822
862
var
823
863
identifier = field . identifier || fieldName ,
824
864
$field = module . get . field ( identifier ) ,
@@ -854,13 +894,17 @@ $.fn.form = function(parameters) {
854
894
} ) ;
855
895
}
856
896
if ( fieldValid ) {
857
- module . remove . prompt ( identifier , fieldErrors ) ;
858
- settings . onValid . call ( $field ) ;
897
+ if ( showErrors ) {
898
+ module . remove . prompt ( identifier , fieldErrors ) ;
899
+ settings . onValid . call ( $field ) ;
900
+ }
859
901
}
860
902
else {
861
- formErrors = formErrors . concat ( fieldErrors ) ;
862
- module . add . prompt ( identifier , fieldErrors ) ;
863
- settings . onInvalid . call ( $field , fieldErrors ) ;
903
+ if ( showErrors ) {
904
+ formErrors = formErrors . concat ( fieldErrors ) ;
905
+ module . add . prompt ( identifier , fieldErrors ) ;
906
+ settings . onInvalid . call ( $field , fieldErrors ) ;
907
+ }
864
908
return false ;
865
909
}
866
910
return true ;
@@ -1090,8 +1134,9 @@ $.fn.form.settings = {
1090
1134
} ,
1091
1135
1092
1136
regExp : {
1137
+ htmlID : / ^ [ a - z A - Z ] [ \w : . - ] * $ / g,
1093
1138
bracket : / \[ ( .* ) \] / i,
1094
- decimal : / ^ \d * ( \. ) \d + / ,
1139
+ decimal : / ^ \d + \. ? \d * $ / ,
1095
1140
email : / ^ [ a - z 0 - 9 ! # $ % & ' * + \/ = ? ^ _ ` { | } ~ . - ] + @ [ a - z 0 - 9 ] ( [ a - z 0 - 9 - ] * [ a - z 0 - 9 ] ) ? ( \. [ a - z 0 - 9 ] ( [ a - z 0 - 9 - ] * [ a - z 0 - 9 ] ) ? ) * $ / i,
1096
1141
escape : / [ \- \[ \] \/ \{ \} \( \) \* \+ \? \. \\ \^ \$ \| ] / g,
1097
1142
flags : / ^ \/ ( .* ) \/ ( .* ) ? / ,
@@ -1475,6 +1520,9 @@ $.fn.form.settings = {
1475
1520
return ;
1476
1521
}
1477
1522
1523
+ // allow dashes in card
1524
+ cardNumber = cardNumber . replace ( / [ \- ] / g, '' ) ;
1525
+
1478
1526
// verify card types
1479
1527
if ( requiredTypes ) {
1480
1528
$ . each ( requiredTypes , function ( index , type ) {
0 commit comments