Проблема в том, что forцикл является синхронным и блокирует поток пользовательского интерфейса от обновления с добавлением / удалением класса, которое вы сделали.
Решением этого является то, что петля в короткой задержке, например:$("#search").submit(function(e) { e.preventDefault(); var $search = $("#search-button") $search.removeClass("fa-search").addClass("fa-spinner fa-spin") setTimeout(function() { for (var i = 0; i < 50000; i++){ console.log(i) } $search.addClass("fa-search").removeClass("fa-spinner fa-spin") }, 50); })
event
Рабочий пример
Обратите внимание, что вы должны использовать eventпараметр, переданный обработчику события, а не глобальный eventобъект. Кроме того, логика removeClass()/ addClass()была назад после цикла и задала неправильные классы, в которых вы заявляете, что хотите повторно установить fa-searchкласс.