From 81b1549d11b4a0fa787212dde9f41e640fa9abac Mon Sep 17 00:00:00 2001 From: David Gil Date: Thu, 10 Sep 2015 16:56:04 +0200 Subject: [PATCH] prevents double submit for form buttons --- app/assets/javascripts/application.js | 1 + .../prevent_double_submission.js.coffee | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 app/assets/javascripts/prevent_double_submission.js.coffee diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 2a7676be9..7f00e0f02 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -33,6 +33,7 @@ var initialize_modules = function() { App.Dropdown.initialize(); App.LocationChanger.initialize(); App.CheckAllNone.initialize(); + App.PreventDoubleSubmission.initialize(); }; $(function(){ diff --git a/app/assets/javascripts/prevent_double_submission.js.coffee b/app/assets/javascripts/prevent_double_submission.js.coffee new file mode 100644 index 000000000..933ed9e97 --- /dev/null +++ b/app/assets/javascripts/prevent_double_submission.js.coffee @@ -0,0 +1,28 @@ +App.PreventDoubleSubmission = + disable_button: (button) -> + unless button.hasClass('disabled') + loading = button.data('loading') ? 'Sending ...' + button.addClass('disabled').attr('disabled', 'disabled') + button.data('text', button.val()) + button.val(loading) + + reset_button: (button) -> + if button.hasClass('disabled') + button_text = button.data('text') + button.removeClass('disabled').attr('disabled', null) + if button_text + button.val(button_text) + button.data('text', null) + + initialize: -> + $('form').on('submit', event, -> + $form = $(this) + button = $form.find('.button') + App.PreventDoubleSubmission.disable_button(button) + ).on('ajax:success', -> + $form = $(this) + button = $form.find('.button') + App.PreventDoubleSubmission.reset_button(button) + ) + + false