2016-09-01 18 views
6

Czy możliwe jest zachowanie domyślnej weryfikacji HTML przy przesyłaniu przez Javascript?Sprawdzanie poprawności formularza HTML przeglądarki podczas przesyłania za pomocą javascript?

Co mam na myśli to, że jeśli mogę przesłać formularz za pomocą tego sposobu JS:

document.getElementById("mc-embedded-subscribe-form").submit(); 

Jak mogę utrzymać komunikaty o błędach defualt rzucane przez przeglądarkę?

enter image description here

Jeden obejście myślałem używa tego:

<form onSubmit="return somefunction()"> 

Ale ponieważ API zwraca sukces wewnątrz funkcji zamknięcia, nie mogą korzystać z tej metody.

+0

Co masz na myśli przez "zachować komunikaty o błędach"? Jaki jest pożądany efekt? – Whothehellisthat

+0

@Whothehellisthat Zakładam, że chce, aby nadal się pojawiały/działają. –

+0

Jakie API zwraca wynik w funkcji zamknięcia? A w jaki sposób uniemożliwia to określenie wyniku z obsługi zdarzeń 'onsubmit'? Nie powinno, wystarczy użyć API z wewnątrz obsługi zdarzeń 'onsubmit'. –

Odpowiedz

2

zgodnie z moją wiedzą na temat twojego pytania, walidacja html nie jest wystarczająca, aby zatrzymać zgłoszenie, musisz również zatwierdzić wymagane dane wejściowe w javascript przed przesłaniem.

np

if (!empty(username)) { 
    document.getElementById("mc-embedded-subscribe-form").submit(); 
} 
+0

Tak, to jest mój plan awaryjny. Próbowałem znaleźć sposób na sprawdzenie poprawności kodu HTML, ale jeśli nie mogę tego zrobić. Dzięki za wejście! :) –

2

HTML5 również określono JS API, które można używać do interakcji z formularzy/elementów w odniesieniu do ich statusu walidacji: https://www.w3.org/TR/html5/forms.html#the-constraint-validation-api

więc najprostszym sposobem osiągnięcia tego celu byłoby aby wywołać metodę checkValidity w formularzu i przesłać ją tylko wtedy, gdy ta zwraca true.

coś takiego:

function submitIfValid() { 
    var form = document.getElementById("mc-embedded-subscribe-form"); 
    if(form.checkValidity()) { 
    form.submit(); 
    } 
    else { 
    // 
    } 
} 

a potem po prostu zadzwonić do tej funkcji, gdy chcesz wywołać złożenie formularza.

0

Nie musisz już używać form.submit(). Zrób to poprawnie (onsubmit) lub użyj click() na przycisku wysyłania.

Robi to właściwie ...

Nie mogę myśleć o dobry powód, aby automatycznie przesłać widzialną postać. Aby przesłać dane bez interakcji użytkownika, należy użyć XMLHttpRequest lub WebSockets.

Formularz jest przesyłany przez interakcję użytkownika (np. Naciśnięcie przycisku przesyłania), więc nie ma potrzeby używania JavaScript do przesyłania formularza. Jest bardziej prawdopodobne, że potrzebujesz JavaScript do prevent a form submission, zwracając false w obsłudze zdarzeń .

... lub użyj click()

Do programowo walidacji invoke HTML5 (a także wszelkie JavaScript onsubmit obsługi zdarzeń dołączonych do formularza), można wywołać funkcję click() z przycisku twierdzą, że należy do postaci .

Jeśli formularz ma przycisku przedstawienia, można utworzyć tymczasowy:

var form = document.getElementById("mc-embedded-subscribe-form"); 
var button = document.createElement('input'); 
button.type = 'submit'; 
button.style.display = 'none'; 
form.appendChild(button); 
button.click(); 

formularze z wieloma przedłożyć przyciski powinien mieć każdy name atrybuty więc serwer może wykryć, który przycisk kliknął użytkownik. Możesz kliknąć te przyciski za pomocą form.buttonName.click().

Powiązane problemy