diff --git a/core/modules/file/file.js b/core/modules/file/file.js
index 8ed377e..82ff1f0 100644
--- a/core/modules/file/file.js
+++ b/core/modules/file/file.js
@@ -7,7 +7,7 @@
  * prevents separate file fields from accidentally uploading files).
  */
 
-(function ($, Drupal) {
+(function ($, Drupal, debounce) {
 
   'use strict';
 
@@ -88,13 +88,13 @@
   Drupal.behaviors.fileButtons = {
     attach: function (context) {
       var $context = $(context);
-      $context.find('.js-form-submit').on('mousedown', Drupal.file.disableFields);
-      $context.find('.js-form-managed-file .js-form-submit').on('mousedown', Drupal.file.progressBar);
+      $context.find('.js-form-submit').on('mousedown.fileButtons', Drupal.file.disableFields);
+      $context.find('.js-form-managed-file .js-form-submit').on('mousedown.fileButtons', Drupal.file.progressBar);
     },
     detach: function (context) {
       var $context = $(context);
-      $context.find('.js-form-submit').off('mousedown', Drupal.file.disableFields);
-      $context.find('.js-form-managed-file .js-form-submit').off('mousedown', Drupal.file.progressBar);
+      $context.find('.js-form-submit').off('mousedown.fileButtons');
+      $context.find('.js-form-managed-file .js-form-submit').off('mousedown.fileButtons');
     }
   };
 
@@ -170,7 +170,9 @@
      *   The event triggered. For example `change.autoFileUpload`.
      */
     triggerUploadButton: function (event) {
-      $(event.target).closest('.js-form-managed-file').find('.js-form-submit').trigger('mousedown');
+      $(event.target).closest('.js-form-managed-file').find('.js-form-submit')
+        .trigger('mousedown.fileButtons')
+        .trigger('mousedown');
     },
 
     /**
@@ -181,7 +183,7 @@
      * @param {jQuery.Event} event
      *   The event triggered, most likely a `mousedown` event.
      */
-    disableFields: function (event) {
+    disableFields: debounce(function (event) {
       var $clickedButton = $(this).findOnce('ajax');
 
       // Only disable upload fields for Ajax buttons.
@@ -209,7 +211,7 @@
       setTimeout(function () {
         $fieldsToTemporarilyDisable.prop('disabled', false);
       }, 1000);
-    },
+    }, 100, true),
 
     /**
      * Add progress bar support if possible.
@@ -219,7 +221,7 @@
      * @param {jQuery.Event} event
      *   The event triggered, most likely a `mousedown` event.
      */
-    progressBar: function (event) {
+    progressBar: debounce(function (event) {
       var $clickedButton = $(this);
       var $progressId = $clickedButton.closest('div.js-form-managed-file').find('input.file-progress');
       if ($progressId.length) {
@@ -237,7 +239,7 @@
       setTimeout(function () {
         $clickedButton.closest('div.js-form-managed-file').find('div.ajax-progress-bar').slideDown();
       }, 500);
-    },
+    }, 100, true),
 
     /**
      * Open links to files within forms in a new window.
@@ -254,4 +256,4 @@
     }
   };
 
-})(jQuery, Drupal);
+})(jQuery, Drupal, Drupal.debounce);
diff --git a/core/modules/file/file.libraries.yml b/core/modules/file/file.libraries.yml
index ccc0c3b..659de14 100644
--- a/core/modules/file/file.libraries.yml
+++ b/core/modules/file/file.libraries.yml
@@ -10,3 +10,4 @@ drupal.file:
     - core/jquery.once
     - core/drupal
     - core/drupalSettings
+    - core/drupal.debounce
