Mam formularz, który po przesłaniu wymaga dodatkowej obróbki przed wysłaniem formularza. Mogę zapobiec domyślnemu zachowaniu przesyłania formularza, a następnie wykonać dodatkowe przetwarzanie (w zasadzie jest to wywołanie Google Maps API i dodanie kilku ukrytych pól do formularza) - a następnie potrzebuję formularza do przesłania.
Czy istnieje sposób, aby „zapobiec domyślnemu”, a następnie w pewnym momencie „kontynuować domyślne”?
javascript
jquery
StackOverflowNewbie
źródło
źródło
Odpowiedzi:
Kiedy łączysz
.submit()
zdarzenie z formularzem i robisz to, co chcesz zrobić przed zwróceniem (prawda), te rzeczy mają miejsce przed faktycznym przesłaniem.Na przykład:
Prosty przykład
Inny przykład na jquery.com: http://api.jquery.com/submit/#entry-examples
źródło
Posługiwać się
jQuery.one()
Użycie funkcji Prevent
one
również nieskończonej pętli, ponieważsubmit
zdarzenie niestandardowe jest wyłączane po pierwszym przesłaniu.źródło
Po prostu zrobiłbym:
Zadzwoń
preventDefault
najpierw, asubmit()
później użyj funkcji, jeśli potrzebujesz tylko przesłać formularzźródło
Używając w ten sposób, wykonasz nieskończoną pętlę na swoim JS. aby zrobić lepszy sposób, możesz użyć następujących
Mam nadzieję, że to pomoże! Dzięki!
źródło
To jest, IMHO, najbardziej ogólne i niezawodne rozwiązanie (jeśli twoje działania są wyzwalane przez użytkownika, np. „Użytkownik klika przycisk”):
Jako przykład zwróć uwagę na to eleganckie rozwiązanie dodawania „Czy na pewno?” wyskakujące okienko do dowolnego przycisku, po prostu dekorując przycisk atrybutem. Będziemy warunkowo kontynuować domyślne zachowanie, jeśli użytkownik nie zrezygnuje.
1. Dodajmy do każdego przycisku, który ma mieć wyskakujące okienko „Czy na pewno”, tekst ostrzeżenia:
2. Dołącz programy obsługi do WSZYSTKICH takich przycisków:
Otóż to.
źródło
źródło
Z
jQuery
małą odmianą odpowiedzi @ Joepreludian powyżej:Ważne kwestie, o których należy pamiętać:
.one(...)
zamiast na.on(...) or .submit(...)
named
funkcja zamiast,anonymous function
ponieważ będziemy odnosić się do niej w ramachcallback
.Możesz zmienić wartość
allIsWell
zmiennej w poniższym fragmencie natrue
lub wfalse
celu przetestowania funkcjonalności:Powodzenia...
źródło
Formularz można przesłać w czystym języku Javascript po zapobieżeniu domyślnemu.
To dlatego, że
HTMLFormElement.submit()
nigdy nie zwracaonSubmit()
. Więc polegamy na tej dziwności specyfikacji, aby przesłać formularz tak, jakby nie miał tutaj niestandardowej procedury obsługi onsubmit.Zobacz te skrzypce, aby uzyskać synchroniczne żądanie.
Czekanie na zakończenie żądania asynchronicznego jest równie łatwe:
Możesz sprawdzić moje skrzypce, aby zobaczyć przykład żądania asynchronicznego.
A jeśli nie masz obietnic:
A oto ta prośba .
źródło
Możesz użyć,
e.preventDefault()
który zatrzyma bieżącą operację.niż możesz zrobić
$("#form").submit();
źródło
„Wstrzyknięcie walidacyjne bez zapętlenia przesyłania”:
Chcę tylko sprawdzić reCaptcha i kilka innych rzeczy przed walidacją HTML5, więc zrobiłem coś takiego (funkcja walidacji zwraca prawdę lub fałsz):
źródło