, . , .
:
true/false e.preventDefault() form.submit(), form.submit() , , , /.
pointer-events: none; disabled="disabled", / . , pointer-events: none; Internet Explorer 10 .
javascript/jquery:
var form_selector = 'form',
button_selector = 'button, input[type=submit], input[type=button], input[type=reset]',
deactivated_classname = 'state-submitting',
deactivated_class = '.'+'state-submitting';
$(document).on('submit', form_selector, function(e) {
var form = e.target,
buttons = $( form ).find( button_selector );
if( $( form ).find( deactivated_class ).length > 0 ) return false;
disableButtons( buttons );
setTimeout(function() {
return true;
}, 50 );
});
function disableButtons( buttons ) {
$( buttons ).each(function( index, elem ) {
$( elem ).addClass( deactivated_classname );
});
}
AJAX .
$( document ).on( 'ajax:complete', form_selector, function(e) {
var form = e.target,
buttons = $( form ).find( button_selector );
enableButtons( buttons );
});
function enableButtons( buttons ) {
$( buttons ).each(function( index, elem ) {
$( elem ).removeClass( deactivated_classname );
});
}
CSS
// The button is disabled while it is submitting.
.state-submitting {
// Turns off hover and click events. Not supported in IE 10 and below.
pointer-events: none;
opacity: 0.5;
}