@@ -26,9 +26,10 @@ $.extend( $.fn, {
26
26
if ( validator . settings . onsubmit ) {
27
27
28
28
this . on ( "click.validate" , ":submit" , function ( event ) {
29
+
29
30
// Track the used submit button to properly handle scripted
30
31
// submits later.
31
- validator . submitButton = event . target ;
32
+ validator . submitButton = event . currentTarget ;
32
33
33
34
// Allow suppressing validation by adding a cancel class to the submit button
34
35
if ( $ ( this ) . hasClass ( "cancel" ) ) {
@@ -50,17 +51,22 @@ $.extend( $.fn, {
50
51
}
51
52
function handle ( ) {
52
53
var hidden , result ;
53
- if ( validator . settings . submitHandler ) {
54
- if ( validator . submitButton ) {
55
54
56
- // Insert a hidden input as a replacement for the missing submit button
57
- hidden = $ ( "<input type='hidden'/>" )
58
- . attr ( "name" , validator . submitButton . name )
59
- . val ( $ ( validator . submitButton ) . val ( ) )
60
- . appendTo ( validator . currentForm ) ;
61
- }
55
+ // Insert a hidden input as a replacement for the missing submit button
56
+ // The hidden input is inserted in two cases:
57
+ // - A user defined a `submitHandler`
58
+ // - There was a pending request due to `remote` method and `stopRequest()`
59
+ // was called to submit the form in case it's valid
60
+ if ( validator . submitButton && ( validator . settings . submitHandler || validator . formSubmitted ) ) {
61
+ hidden = $ ( "<input type='hidden'/>" )
62
+ . attr ( "name" , validator . submitButton . name )
63
+ . val ( $ ( validator . submitButton ) . val ( ) )
64
+ . appendTo ( validator . currentForm ) ;
65
+ }
66
+
67
+ if ( validator . settings . submitHandler ) {
62
68
result = validator . settings . submitHandler . call ( validator , validator . currentForm , event ) ;
63
- if ( validator . submitButton ) {
69
+ if ( hidden ) {
64
70
65
71
// And clean up afterwards; thanks to no-block-scope, hidden can be referenced
66
72
hidden . remove ( ) ;
@@ -1082,20 +1088,16 @@ $.extend( $.validator, {
1082
1088
delete this . pending [ element . name ] ;
1083
1089
$ ( element ) . removeClass ( this . settings . pendingClass ) ;
1084
1090
if ( valid && this . pendingRequest === 0 && this . formSubmitted && this . form ( ) ) {
1085
- var hidden ;
1086
- // If no submit handler is set but a submit button is present
1087
- // ensure the following scripted submit has the value of the
1088
- // submit button by injecting a hidden field.
1089
- if ( ! this . settings . submitHandler && this . submitButton ) {
1090
- hidden = $ ( "<input type='hidden'/>" )
1091
- . attr ( "name" , this . submitButton . name )
1092
- . val ( $ ( this . submitButton ) . val ( ) )
1093
- . appendTo ( this . currentForm ) ;
1094
- }
1095
1091
$ ( this . currentForm ) . submit ( ) ;
1096
- if ( hidden ) {
1097
- hidden . remove ( ) ;
1092
+
1093
+ // Remove the hidden input that was used as a replacement for the
1094
+ // missing submit button. The hidden input is added by `handle()`
1095
+ // to ensure that the value of the used submit button is passed on
1096
+ // for scripted submits triggered by this method
1097
+ if ( this . submitButton ) {
1098
+ $ ( "input:hidden[name='" + this . submitButton . name + "']" , this . currentForm ) . remove ( ) ;
1098
1099
}
1100
+
1099
1101
this . formSubmitted = false ;
1100
1102
} else if ( ! valid && this . pendingRequest === 0 && this . formSubmitted ) {
1101
1103
$ ( this . currentForm ) . triggerHandler ( "invalid-form" , [ this ] ) ;
0 commit comments