diff --git a/app/assets/javascripts/gl_dropdown.js b/app/assets/javascripts/gl_dropdown.js
index 77fa662892a1a3bd0f45fcae8091bf62ffd1618f..0d618caf35092c93991f0233b6b57d4a4a46ef3b 100644
--- a/app/assets/javascripts/gl_dropdown.js
+++ b/app/assets/javascripts/gl_dropdown.js
@@ -47,9 +47,11 @@
           }
           // Only filter asynchronously only if option remote is set
           if (this.options.remote) {
+            $inputContainer.parent().addClass('is-loading');
             clearTimeout(timeout);
             return timeout = setTimeout(function() {
               return this.options.query(this.input.val(), function(data) {
+                $inputContainer.parent().removeClass('is-loading');
                 return this.options.callback(data);
               }.bind(this));
             }.bind(this), 250);
diff --git a/changelogs/unreleased/27966-branch-ref-switcher-input-filter-broken.yml b/changelogs/unreleased/27966-branch-ref-switcher-input-filter-broken.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6fa13395a7d51d97ed65f5dcbc7da854fe91f2f6
--- /dev/null
+++ b/changelogs/unreleased/27966-branch-ref-switcher-input-filter-broken.yml
@@ -0,0 +1,4 @@
+---
+title: Display loading indicator when filtering ref switcher dropdown
+merge_request:
+author:
diff --git a/spec/features/projects/ref_switcher_spec.rb b/spec/features/projects/ref_switcher_spec.rb
index 38fe2d928851667a0b80565b3f36efaa50684fe3..4eafac1acd89aba9a0d225d8aea26b556b5dbe35 100644
--- a/spec/features/projects/ref_switcher_spec.rb
+++ b/spec/features/projects/ref_switcher_spec.rb
@@ -20,9 +20,9 @@ feature 'Ref switcher', feature: true, js: true do
       input.set 'binary'
       wait_for_ajax
 
-      input.native.send_keys :down
-      input.native.send_keys :down
-      input.native.send_keys :enter
+      page.within '.dropdown-content ul' do
+        input.native.send_keys :enter
+      end
     end
 
     expect(page).to have_title 'binary-encoding'
diff --git a/spec/javascripts/gl_dropdown_spec.js.es6 b/spec/javascripts/gl_dropdown_spec.js.es6
index 317f38c5888063922d449830c02318b1607bf4f0..c207fb00a475fa85363fb6330214ea07bf1ab741 100644
--- a/spec/javascripts/gl_dropdown_spec.js.es6
+++ b/spec/javascripts/gl_dropdown_spec.js.es6
@@ -139,6 +139,14 @@ require('~/lib/utils/url_utility');
         this.dropdownButtonElement.click();
       });
 
+      it('should show loading indicator while search results are being fetched by backend', () => {
+        const dropdownMenu = document.querySelector('.dropdown-menu');
+
+        expect(dropdownMenu.className.indexOf('is-loading') !== -1).toEqual(true);
+        remoteCallback();
+        expect(dropdownMenu.className.indexOf('is-loading') !== -1).toEqual(false);
+      });
+
       it('should not focus search input while remote task is not complete', () => {
         expect($(document.activeElement)).not.toEqual($(SEARCH_INPUT_SELECTOR));
         remoteCallback();