Mam formularz, w którym jest gdzieś przycisk przesyłania.
Chciałbym jednak jakoś „złapać” zdarzenie przesyłania i zapobiec jego wystąpieniu.
Czy jest jakiś sposób, aby to zrobić?
Nie mogę zmodyfikować przycisku przesyłania, ponieważ jest to część niestandardowej kontroli.
javascript
html
forms
Nathan Osman
źródło
źródło
Odpowiedzi:
W przeciwieństwie do innych odpowiedzi, zwrot
false
jest tylko częścią odpowiedzi. Rozważ scenariusz, w którym występuje błąd JS przed instrukcją return ...HTML
scenariusz
powrót
false
tutaj nie zostanie wykonany, a formularz zostanie przesłany w obu przypadkach. Powinieneś także zadzwonić,preventDefault
aby zapobiec domyślnej akcji formularza dla formularzy Ajax.W takim przypadku nawet w przypadku błędu formularz nie zostanie przesłany!
Alternatywnie można zastosować
try...catch
blok.źródło
false
bezpośrednio zonsumbit
?(<form onsubmit="return mySubmitFunction(evt)">)
.W przeciwnym razie pojawia się niezdefiniowany błąd.Możesz użyć
onsubmit
takiego zdarzenia inlineLub
Próbny
To może nie być dobry pomysł przy tworzeniu dużych projektów. Może być konieczne użycie Detektorów zdarzeń.
Proszę przeczytać więcej o Inline Events vs Event Listeners (addEventListener i IE's attachEvent) tutaj . Bo nie potrafię tego wyjaśnić bardziej niż Chris Baker .
źródło
<form onsubmit="return false;" >
nie działa dla mnie.Dołącz detektor zdarzeń do formularza za pomocą,
.addEventListener()
a następnie wywołaj.preventDefault()
metodęevent
:Myślę, że jest to lepsze rozwiązanie niż zdefiniowanie
submit
procedury obsługi zdarzeń zgodnej zonsubmit
atrybutem, ponieważ oddziela ona logikę i strukturę strony. Znacznie łatwiej jest utrzymać projekt, w którym logika jest oddzielona od HTML. Zobacz: dyskretny JavaScript .Korzystanie z
.onsubmit
właściwościform
obiektu DOM nie jest dobrym pomysłem, ponieważ uniemożliwia dołączenie wielu wywołań zwrotnych do jednego elementu. Zobacz addEventListener vs onclick .źródło
$("button").click(function(e) { e.preventDefault() });
Spróbuj tego...
Kod HTML
Kod jQuery
lub
źródło
stopPropagation
była jedyną rzeczą, która działała w moim przypadku. dzięki! :)Następujące działa teraz (testowane w chrome i Firefox):
gdzie validateMyForm () to funkcja zwracana w
false
przypadku niepowodzenia sprawdzania poprawności. Kluczową kwestią jest użycie nazwyevent
. Nie możemy używać do npe.preventDefault()
źródło
źródło
.onsubmit
jest złym pomysłem, ponieważ uniemożliwia dołączenie wielusubmit
wywołań zwrotnych do jednego elementu. Polecam używać.addEventListener()
.Aby postępować zgodnie z dyskretnymi konwencjami programowania JavaScript i w zależności od tego, jak szybko DOM się ładuje, dobrym pomysłem może być skorzystanie z następujących opcji:
Następnie połącz zdarzenia za pomocą onload lub DOM ready, jeśli korzystasz z biblioteki.
Ponadto zawsze używałbym tego
action
atrybutu, ponieważ niektóre osoby mogą mieć uruchomioną wtyczkę typu NoScript, która wtedy przerwałaby sprawdzanie poprawności. Jeśli używasz atrybutu akcji, przynajmniej użytkownik zostanie przekierowany przez serwer na podstawie sprawdzania poprawności wewnętrznej bazy danych.window.location
Z drugiej strony, jeśli używasz czegoś takiego , będzie źle.źródło
Aby zapobiec przesłaniu formularza, wystarczy to zrobić.
Użycie powyższego kodu zapobiegnie przesłaniu formularza.
źródło
Oto moja odpowiedź:
Dodam
event.preventDefault();
naonsubmit
i to działa.źródło
Możesz dodać eventListner do formularza, który
preventDefault()
i przekonwertować dane formularza do JSON, jak poniżej:źródło