2013-02-28 9 views
16

Czy jest jakiś sposób na złapanie działania formularza przed zakończeniem procesu sprawdzania poprawności HTML5?Złóż przesyłkę przed sprawdzeniem poprawności HTML5.

To what I have tried:

HTML

<form method='post' > 
    <fieldset> 
     <input type='email' name='foo' required /> 
     <input type='submit' /> 
    </fieldset> 
</form> 

jQuery

$('form').submit(function() { 
    $('fieldset').addStyle('error'); 
    return false; 
}) 

Ale submit jest wyzwalany tylko raz przechodzi walidację HTML5.

+1

Czy potrzebujesz sprawdzania poprawności HTML5? Jeśli nie, zawsze możesz wyłączyć to za pomocą 'novalidate'. –

Odpowiedz

5

Nie, walidacja HTML5 dzieje zanim przedstawić zdarzenia, we wszystkich przeglądarkach, więc nie jest to możliwe, innych niż zmiana rodzaju zdarzenia, jak kliknięcie przycisku:

$('input[type="submit"]').on('click', function() { 
    $('fieldset').addClass('error'); 
}); 

FIDDLE

+1

+1 ładny pomysł ... – ManseUK

+0

Fajnie - wygląda dokładnie to, czego szukam. – Muleskinner

+0

właściwie brakuje czegoś z kodu. Dodaj "e" do "funkcji (e)" i wewnątrz funkcji w pierwszym wierszu 'e.preventDefault;' w przeciwnym razie formularz zostanie przesłany. Następnie, gdy jesteś gotowy, dodaj na końcu funkcji '$ ('formularz'). Submit()' – CodeArtist

7

używać jQuery wyłączyć sprawdzanie poprawności w formularzu, gdy pierwsza strona ładuje więc można zapobiec występowaniu walidacji zanim obsługi onsubmit prowadzi:

$(document).ready(function(){ 
    $('form').attr('novalidate','novalidate'); 
}) 

a następnie pod koniec swojej funkcji onsubmit ręcznie uruchomić walidacji HTML5 na każdym z pól poprzez javascript (przy użyciu checkValidity())

0

Zmienić przycisk z

<input type='submit' /> 

do zwykłego przycisku

<input type='button' id="submit" /> 

a potem, po prostu uchwycić zdarzenia click i zrobić to poddać się

$('#submit').on('click', function() { 
    $('fieldset').addStyle('error'); 

    // if everything is ok 
    $('form').submit(); 
}) 
+0

Tak, pomyślałem o tym, ale odrzuciłem ten pomysł, ponieważ łamie on normalne zachowanie formularza, na przykład ENTER nie przesyła wartości domyślnej – Muleskinner

Powiązane problemy