Jak coś zrobić przed przesłaniem? [Zamknięte]

141

Mam formularz, który ma przycisk, który przesyła formularz. Muszę coś zrobić, zanim nastąpi przesłanie. Próbowałem zrobić onClick na ten przycisk, ale dzieje się to po przesłaniu.

Nie mogę udostępnić kodu, ale generalnie co powinienem zrobić w jQuery lub JS, aby sobie z tym poradzić?

Jimmy
źródło
11
cough jsFiddle Przykład kaszlu
Brad Christie
2
@Brad Christie, gdybym tylko mógł zaakceptować komentarz jako odpowiedź. Dziękuję bardzo pomocny.
Jimmy
3
Nienawidzę, gdy stackover zamyka pytanie. Można obsługiwać za pomocą następujących czynności zdarzenia ogień na poniższym momentu tuż przed złożeniem postać: 1 onmouseover 2- onMouseMove 3- onmousedown 4- onfocus 5- onmouseup 6- onclick 7- onsubmit
Shadi Namrouti
1
Doceniam to pytanie, ponieważ niedawno napotkałem ten sam problem i właśnie to pytanie chciałem zadać.
wastetime909
2
zabawne, że to pytanie zostało zamknięte, ponieważ nie jest to prawdziwe pytanie: -?
AnnaKlein,

Odpowiedzi:

207

Jeśli masz taki formularz:

<form id="myform">
...
</form>

Możesz użyć następującego kodu jQuery, aby zrobić coś przed przesłaniem formularza:

$('#myform').submit(function() {
    // DO STUFF...
    return true; // return false to cancel form action
});
Dan Breen
źródło
2
Mam problemy z używaniem tego dla pętli, które muszą zostać ukończone przed przesłaniem. Jakieś sugestie?
Smilyan
Masz jakiś kod do obejrzenia? Nie jestem pewien, czy rozumiem problem.
Dan Breen,
3
Dlaczego jest to opakowane w puste wywołanie funkcji? Czy submitfunkcja nie powinna mieć możliwości bezpośredniego powiązania z operatorem $('#form')bez otaczającej funkcji pustej? EDYCJA: dokumentacja sugeruje, że wywołanie funkcji otaczającej nie jest potrzebne .
eykanal
@eykanal Słuszna uwaga. Poszedłem dalej i zredagowałem odpowiedź, aby usunąć opakowanie funkcji po potwierdzeniu, że działa dobrze po usunięciu.
Jon Schneider,
3
@eykanal Użyłem wywołania funkcji „empty”, ponieważ jest to skrót dla $(document).ready()funkcji jQuery , która zapewnia, że ​​DOM jest kompletny przed dołączeniem submitzdarzenia. Jeśli Twój JS znajduje się na dole strony, nie jest to konieczne, ale jeśli znajduje się w <head>sekcji, potrzebujesz go. Zobacz: stackoverflow.com/q/13062246/135108
Dan Breen
23

Zakładając, że masz taki formularz:

<form id="myForm" action="foo.php" method="post">
   <input type="text" value="" />
   <input type="submit" value="submit form" />

</form>

Możesz dołączyć onsubmit-event do jQuery w następujący sposób:

$('#myForm').submit(function() {
  alert('Handler for .submit() called.');
  return false;
});

Jeśli return falseformularz nie zostanie przesłany po funkcji, jeśli zwrócisz wartość true lub nic, zostanie on przesłany jak zwykle.

Więcej informacji można znaleźć w dokumentacji jQuery .

kulminacja
źródło
11

Możesz użyć onclickdo uruchomienia kodu JavaScript lub jQuery przed przesłaniem formularza w następujący sposób:

<script type="text/javascript">
    beforeSubmit = function(){
        if (1 == 1){
            //your before submit logic
        }        
        $("#formid").submit();            
    }
</script>
<input type="button" value="Click" onclick="beforeSubmit();" />
James Johnson
źródło
18
Ale to nie działa, gdy formularz zawiera np. Pole wejściowe, użytkownik naciska klawisz powrotu, który uruchamia zdarzenie przesyłania. Zwykle lepiej jest dołączyć bezpośrednio do zdarzenia przesyłania, aby mieć pewność, że zostanie wywołane niezależnie od tego, w jaki sposób użytkownik uruchomił zgłoszenie.
acme
2
<input type = "submit" value = "Click" onmouseover = "beforeSubmit ();" />
Ansyori
5

upewnij się, że przycisk przesyłania nie jest typu „wyślij”, uczyń go przyciskiem. Następnie użyj zdarzenia onclick, aby wywołać skrypt javascript. Tam możesz zrobić, co chcesz, zanim faktycznie opublikujesz swoje dane.

rogerlsmith
źródło
3
Formularz można przesłać na kilka sposobów, na przykład naciskając klawisz Enter w niektórych polach. Powiązanie z jednym kliknięciem przycisku, którego nie można kliknąć, nie jest dobrym pomysłem. Pozostałe odpowiedzi pokazują, w jaki sposób wiążą się onsubmitz postaci , która będzie ogień bez względu na to, w jaki sposób formularz jest składany.
Jason