Myślę, że obie rzeczy się zdarzają. Przeglądarka rozpoczyna wysyłanie formularza, ale również podąża za linkiem: href
. Możesz to naprawić, łącząc się z #
zamiast /post/action
...
... jednak nie polecam tego. Istnieje kilka lepszych podejść:
Po pierwsze, możesz użyć przycisku zamiast linku. Będziesz musiał go stylizować, aby wyglądał jak link, ale to nie powinno być problemem. Będzie lepiej, bo nie złamie Zasady Najmniejszej Niespodzianki (ludzie, którzy czytają kod oczekują formularzy z przyciskami) i nie będziesz potrzebował JavaScript.
Jeśli nalegasz na użycie linku, powinieneś przynajmniej przenieść kod JavaScript z widoku do pliku JavaScript. Następnie dodaj to zachowanie bez najmniejszej ingerencji (chociaż nie będziesz mieć dobrego zastępstwa z linkiem). Zakładając, że używasz jQuery, powinno być tak proste, jak:
$(document).on('click', '[data-submit-form]', function(e) {
e.preventDefault();
$(this).closest('form').submit()
}