diff --git a/core/lib/Drupal/Core/Render/Element/Button.php b/core/lib/Drupal/Core/Render/Element/Button.php
index c305e22..ac34e42 100644
--- a/core/lib/Drupal/Core/Render/Element/Button.php
+++ b/core/lib/Drupal/Core/Render/Element/Button.php
@@ -77,6 +77,7 @@ public static function preRenderButton($element) {
       $element['#attributes']['class'][] = 'button--' . $element['#button_type'];
     }
     // @todo Various JavaScript depends on this button class.
+    $element['#attributes']['class'][] = 'js-form-submit';
     $element['#attributes']['class'][] = 'form-submit';
 
     if (!empty($element['#attributes']['disabled'])) {
diff --git a/core/misc/states.js b/core/misc/states.js
index 680e86e..47cf46b 100644
--- a/core/misc/states.js
+++ b/core/misc/states.js
@@ -509,7 +509,7 @@
     if (e.trigger) {
       $(e.target)
         .prop('disabled', e.value)
-        .closest('.form-item, .form-submit, .form-wrapper').toggleClass('form-disabled', e.value)
+        .closest('.form-item, .js-form-submit, .form-wrapper').toggleClass('form-disabled', e.value)
         .find('select, input, textarea').prop('disabled', e.value);
 
       // Note: WebKit nightlies don't reflect that change correctly.
@@ -534,7 +534,7 @@
 
   $(document).on('state:visible', function (e) {
     if (e.trigger) {
-      $(e.target).closest('.form-item, .form-submit, .form-wrapper').toggle(e.value);
+      $(e.target).closest('.form-item, .js-form-submit, .form-wrapper').toggle(e.value);
     }
   });
 
diff --git a/core/modules/file/file.js b/core/modules/file/file.js
index b704542..dea56e7 100644
--- a/core/modules/file/file.js
+++ b/core/modules/file/file.js
@@ -67,13 +67,13 @@
   Drupal.behaviors.fileButtons = {
     attach: function (context) {
       var $context = $(context);
-      $context.find('.form-submit').on('mousedown', Drupal.file.disableFields);
-      $context.find('.form-managed-file .form-submit').on('mousedown', Drupal.file.progressBar);
+      $context.find('.js-form-submit').on('mousedown', Drupal.file.disableFields);
+      $context.find('.form-managed-file .js-form-submit').on('mousedown', Drupal.file.progressBar);
     },
     detach: function (context) {
       var $context = $(context);
-      $context.find('.form-submit').off('mousedown', Drupal.file.disableFields);
-      $context.find('.form-managed-file .form-submit').off('mousedown', Drupal.file.progressBar);
+      $context.find('.js-form-submit').off('mousedown', Drupal.file.disableFields);
+      $context.find('.form-managed-file .js-form-submit').off('mousedown', Drupal.file.progressBar);
     }
   };
 
@@ -128,7 +128,7 @@
      * Trigger the upload_button mouse event to auto-upload as a managed file.
      */
     triggerUploadButton: function (event) {
-      $(event.target).closest('.form-managed-file').find('.form-submit').trigger('mousedown');
+      $(event.target).closest('.form-managed-file').find('.js-form-submit').trigger('mousedown');
     },
     /**
      * Prevent file uploads when using buttons not intended to upload.
