Jakiś czas temu potrzebowałem czegoś bardzo podobnego ... i dostałem to.
Wstawiam więc sposób, w jaki wykonuję sztuczki, aby formularz mógł zostać przesłany przez JavaScript bez sprawdzania poprawności i sprawdzania poprawności tylko wtedy, gdy użytkownik naciśnie przycisk (zwykle przycisk wysyłania).
Na przykład użyję minimalnego formularza, tylko z dwoma polami i przyciskiem wysyłania.
Pamiętaj, co jest potrzebne: z JavaScript musi być możliwe przesłanie go bez sprawdzania. Jeśli jednak użytkownik naciśnie taki przycisk, weryfikacja musi zostać wykonana, a formularz wysłany tylko po pozytywnym przejściu weryfikacji.
Normalnie wszystko zaczynałoby się od czegoś w pobliżu (usunąłem wszystkie dodatkowe rzeczy, które nie są ważne):
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="submit" value="Send" onclick="JavaScript:return Validator();" />
</form>
Zobacz, jak tag formularza nie ma onsubmit="..."
(pamiętaj, że warunkiem było nie mieć go).
Problem polega na tym, że formularz jest zawsze przesyłany, bez względu na to, czy onclick
zwrot true
lub false
.
Jeśli zmienię type="submit"
dla type="button"
wydaje się działać, ale nie. Nigdy nie wysyła formularza, ale można to łatwo zrobić.
Więc w końcu użyłem tego:
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="button" value="Send" onclick="JavaScript:return Validator();" />
</form>
I function Validator
tam, gdzie return True;
jest, dodaję także zdanie przesyłania JavaScript, coś podobnego do tego:
function Validator(){
// ...bla bla bla... the checks
if( ){
document.getElementById('theFormID').submit();
return(true);
}else{
return(false);
}
}
Dotyczy id=""
tylko JavaScript getElementById
, name=""
tylko po to, aby pojawił się na danych POST.
W ten sposób działa tak, jak potrzebuję.
Umieszczam to tylko dla osób, które nie potrzebują żadnej onsubmit
funkcji w formularzu, ale dokonuję pewnej weryfikacji po naciśnięciu przycisku przez użytkownika.
Dlaczego nie potrzebuję onsubmit na znaczniku formularza? Łatwo, w innych częściach JavaScript muszę wykonać przesłanie, ale nie chcę, aby była jakakolwiek weryfikacja.
Powód: jeśli użytkownik jest tym, który wykonuje przesyłanie, chcę i chcę przeprowadzić weryfikację, ale jeśli jest to JavaScript, czasami muszę wykonać przesyłanie, podczas gdy takie weryfikacje by tego uniknąć.
Może to zabrzmieć dziwnie, ale nie podczas myślenia na przykład: przy logowaniu ... z pewnymi ograniczeniami ... np. Nie zezwalaj na używanie sesji PHP i żadne ciasteczka nie są dozwolone!
Tak więc każdy link musi zostać przekonwertowany na taki formularz, aby dane logowania nie zostały utracone. Jeśli logowanie nie jest jeszcze wykonane, musi również działać. Dlatego nie można przeprowadzać sprawdzania poprawności linków. Ale chcę przedstawić użytkownikowi wiadomość, jeśli użytkownik nie wprowadził obu pól, użytkownika i hasła. Jeśli więc brakuje jednego, formularza nie można wysłać! jest problem.
Zobacz problem: formularza nie można wysłać, gdy jedno pole jest puste, tylko jeśli użytkownik nacisnął przycisk, jeśli jest to kod JavaScript, musi być możliwe wysłanie.
Jeśli będę pracować nad onsubmit
znacznikiem formularza, będę musiał wiedzieć, czy to użytkownik, czy inny JavaScript. Ponieważ nie można przekazać żadnych parametrów, nie jest to możliwe bezpośrednio, więc niektóre osoby dodają zmienną, aby powiedzieć, czy należy przeprowadzić weryfikację, czy nie. Pierwszą rzeczą w funkcji sprawdzania poprawności jest sprawdzenie tej wartości zmiennej itp. Zbyt skomplikowane i kod nie mówi, co jest naprawdę potrzebne.
Tak więc rozwiązaniem nie jest onsubmit na znaczniku formularza. Insead umieść go tam, gdzie jest naprawdę potrzebny, na przycisku.
Z drugiej strony, po co umieszczać kod onsubmit, ponieważ koncepcyjnie nie chcę sprawdzania poprawności onsubmit. Naprawdę chcę zatwierdzenia przycisku.
Kod jest nie tylko bardziej przejrzysty, ale także tam, gdzie musi być. Pamiętaj tylko: - Nie chcę, aby JavaScript weryfikował formularz (musi to zawsze robić PHP po stronie serwera) - Chcę pokazać użytkownikowi komunikat informujący, że wszystkie pola nie mogą być puste, wymaga JavaScript (klient bok)
Dlaczego więc niektórzy ludzie (pomyślcie lub powiedzcie mi), że trzeba to zrobić po jednorazowej weryfikacji? Nie, koncepcyjnie nie robię onsumbit sprawdzania poprawności po stronie klienta. Po prostu robię coś na naciśnięciu przycisku, więc dlaczego nie pozwolić, aby to zostało zaimplementowane?
Cóż, ten kod i styl doskonale sobie radzą. Na każdym JavaScript, który muszę wysłać, właśnie wstawiłem formularz:
document.getElementById('theFormID').action='./GoToThisPage.php'; // Where to go
document.getElementById('theFormID').submit(); // Send POST data and go there
I to pomija walidację, gdy jej nie potrzebuję. Po prostu wysyła formularz i ładuje inną stronę itp.
Ale jeśli użytkownik kliknie przycisk przesyłania (inaczej type="button"
nie type="submit"
), sprawdzanie poprawności zostanie wykonane przed zezwoleniem na przesłanie formularza i, jeśli nie jest poprawne, nie zostanie wysłane.
Mam nadzieję, że pomoże to innym osobom nie wypróbować długiego i skomplikowanego kodu. Po prostu nie używaj, onsubmit
jeśli nie jest potrzebny, i używaj onclick
. Ale należy pamiętać, aby zmieniać type="submit"
się type="button"
i proszę nie zapomnieć zrobić to submit()
przez JavaScript.