@@ -49,53 +49,71 @@ jQuery.validator.addMethod("rangeDate", function(value, element, params) {
49
49
return this . optional ( element ) || dateValue >= params [ 0 ] && dateValue <= params [ 1 ] ;
50
50
} , jQuery . validator . format ( 'The date must be between {0} and {1}.' ) ) ;
51
51
52
- //http://stackoverflow.com/questions/976384/jquery-validator-addmethod-custom-message
53
52
jQuery . validator . addMethod ( "unique" , function ( value , element , params ) {
54
- var validator = this ;
55
- params . data [ element . name ] = value ;
56
- params . data [ 'constraint' ] = 'unique' ;
57
- $ . post ( params . url , params . data , function ( response ) {
58
- if ( response == 'true' ) { return true ; }
59
- else {
60
- var errors = { } ;
61
- errors [ element . name ] = response ;
62
- validator . showErrors ( errors ) ;
63
- return false ;
64
- }
65
- } , 'text' ) ;
53
+ return JQueryValidatorUI . remote ( this , "unique" , value , element , params ) ;
66
54
} , '' ) ;
67
55
68
56
jQuery . validator . addMethod ( "validator" , function ( value , element , params ) {
69
- var validator = this ;
70
- params . data [ element . name ] = value ;
71
- params . data [ 'constraint' ] = 'validator' ;
72
- $ . post ( params . url , params . data , function ( response ) {
73
- if ( response == 'true' ) { return true ; }
74
- else {
75
- var errors = { } ;
76
- errors [ element . name ] = response ;
77
- validator . showErrors ( errors ) ;
78
- return false ;
79
- }
80
- } , 'text' ) ;
57
+ return JQueryValidatorUI . remote ( this , "validator" , value , element , params ) ;
81
58
} , '' ) ;
82
59
83
60
jQuery . validator . addMethod ( "custom" , function ( value , element , params ) {
84
- var validator = this ;
85
- params . data [ element . name ] = value ;
86
- $ . post ( params . url , params . data , function ( response ) {
87
- if ( response == 'true' ) { return true ; }
88
- else {
89
- var errors = { } ;
90
- errors [ element . name ] = response ;
91
- validator . showErrors ( errors ) ;
92
- return false ;
93
- }
94
- } , 'text' ) ;
61
+ return JQueryValidatorUI . remote ( this , null , value , element , params ) ; // unknown constraint
95
62
} , '' ) ;
96
63
97
64
// http://www.24hourapps.com/2009/02/jquery-international-phone-number.html
98
65
jQuery . validator . addMethod ( "phone" , function ( value , element , params ) {
99
66
return this . optional ( element ) || value . match ( / ^ ( ( \+ ) ? [ 1 - 9 ] { 1 , 2 } ) ? ( [ - \s \. ] ) ? ( ( \( \d { 1 , 4 } \) ) | \d { 1 , 4 } ) ( ( [ - \s \. ] ) ? [ 0 - 9 ] { 1 , 12 } ) { 1 , 2 } $ / ) ;
100
67
} , 'Invalid international phone number.' ) ;
68
+
69
+ // amended from existing remote method
70
+ JQueryValidatorUI = {
71
+ remote : function ( validator , constraint , value , element , params ) {
72
+ if ( validator . optional ( element ) )
73
+ return "dependency-mismatch" ;
74
+
75
+ var previous = validator . previousValue ( element ) ;
76
+ if ( ! validator . settings . messages [ element . name ] )
77
+ validator . settings . messages [ element . name ] = { } ;
78
+ previous . originalMessage = validator . settings . messages [ element . name ] . remote ;
79
+ validator . settings . messages [ element . name ] . remote = previous . message ;
80
+
81
+ if ( previous . old !== value ) {
82
+ previous . old = value ;
83
+ validator . startRequest ( element ) ;
84
+ params . data [ element . name ] = value ;
85
+ if ( constraint )
86
+ params . data [ 'constraint' ] = constraint ;
87
+ $ . ajax ( $ . extend ( true , {
88
+ url : params . url ,
89
+ mode : "abort" ,
90
+ port : "validate" + element . name ,
91
+ dataType : "json" ,
92
+ data : params . data ,
93
+ success : function ( response ) {
94
+ validator . settings . messages [ element . name ] . remote = previous . originalMessage ;
95
+ var valid = response === true ;
96
+ if ( valid ) {
97
+ var submitted = validator . formSubmitted ;
98
+ validator . prepareElement ( element ) ;
99
+ validator . formSubmitted = submitted ;
100
+ validator . successList . push ( element ) ;
101
+ validator . showErrors ( ) ;
102
+ } else {
103
+ var errors = { } ;
104
+ var message = ( previous . message = response . message || validator . defaultMessage ( element , constraint ) ) ;
105
+ errors [ element . name ] = $ . isFunction ( message ) ? message ( value ) : message ;
106
+ validator . showErrors ( errors ) ;
107
+ }
108
+ previous . valid = valid ;
109
+ validator . stopRequest ( element , valid ) ;
110
+ }
111
+ } , params . url ) ) ;
112
+ return "pending" ;
113
+ } else if ( validator . pending [ element . name ] ) {
114
+ return "pending" ;
115
+ }
116
+ return previous . valid ;
117
+ }
118
+ } ;
101
119
0 commit comments