$("form").submit();
снова запускает ваш обработчик, вызывая бесконечный цикл.
Попробуйте вместо этого:
$('form').off('submit', handler).submit();
.
Демонстрация:
$('form').on('submit', function handler(event) {
event.preventDefault();
$('#main_div').fadeOut(1000, function() {
$('form').off('submit', handler).submit();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main_div">
<form action="https://en.wikipedia.org" method="get">
<input type="text" name="name"><br>
<input type="password" name="pass"><br>
<input type="submit" name="login" value="Login">
</form>
</div>
Примечание: использование селектора form
кажется плохой идеей, и в таких случаях $(this)
следует предпочитать в обработчиках событий.