2013-07-24 15 views
5

Używam walidacji jQuery do formularza, ale gdy formularz jest sprawdzany, przeładowuje lub przesyła stronę, którą chcę zatrzymać. Używam już event.preventDefault(), ale to nie działa.jQuery Sprawdź poprawność formularza stop składam

Oto mój kod:

$("#step1form").validate(); 
$("#step1form").on("submit", function(e){ 
    var isValid = $("#step1form").valid(); 

    if(isValid){ 
     e.preventDefault(); 
     // Things i would like to do after validation 
     $(".first_step_form").fadeOut(); 
     if(counter == 3){ 
      $(".second_step_summary").fadeIn(); 
      $(".third_step_form").fadeIn(); 
      $(".third_inactive").fadeOut(); 
     }else if(counter < 3){ 
      $(".second_step_form").fadeIn(); 
      $(".third_inactive").fadeIn(); 
     } 

     $(".first_step_summary").fadeIn(); 
     $(".second_inactive").fadeOut(); 
    } 

    return false; 
}); 
+1

masz 'e.preventDefault()' w niewłaściwym miejscu. Jest wewnątrz instrukcji 'if', która działa tylko wtedy, gdy formularz jest prawidłowy. – Archer

+0

i tak nie działa – monk

+0

Będzie, jeśli formularz jest ważny, ale jest w złym miejscu, niezależnie. – Archer

Odpowiedz

8

submitHandler to funkcja wywołania zwrotnego wbudowana w wtyczkę.

submitHandler (domyślnie: natywna forma przedstawienia):

oddzwaniania do obsługi rzeczywista złożyć, gdy formularz jest ważny. Pobiera formularz jako jedyny argument. Zastępuje domyślne przesłanie. W prawo miejsce do przesłania formularza za pośrednictwem Ajax po sprawdzeniu poprawności.

Od submitHandler automatycznie przechwytuje kliknięcia przycisku Prześlij i tylko pożary na ważnej postaci, nie trzeba innego przedstawienia obsługi, ani nie trzeba używać valid() przetestować formę.

kod można zastąpić:

$("#step1form").validate({ 
    submitHandler: function(form) { 
     // Things I would like to do after validation 
     $(".first_step_form").fadeOut(); 
     if(counter == 3){ 
      $(".second_step_summary").fadeIn(); 
      $(".third_step_form").fadeIn(); 
      $(".third_inactive").fadeOut(); 
     }else if(counter < 3){ 
      $(".second_step_form").fadeIn(); 
      $(".third_inactive").fadeIn(); 
     } 
     $(".first_step_summary").fadeIn(); 
     $(".second_inactive").fadeOut(); 
     return false; // block the default submit action 
    } 
}); 
+0

gdzie określić adres URL działania do przesłania? –

+0

@coding_idiot, ponieważ chce użyć 'preventDefault()' zakłada, że ​​OP robi zgłoszenie Ajax wewnątrz 'submitHandler'. Bez funkcji "submitHandler" zostanie wywołana domyślna 'akcja' na elemencie'

'. – Sparky

+0

dzięki, to działa. Ale niestety, mam pola wejściowe z 'kropką' w nazwie. Proszę zobaczyć moje pytanie tutaj - http://stackoverflow.com/questions/20219923/how-to-validate-input-fields-with-a-dot-in-name-using-the-jquery-validation-plug/20220457? noredirect = 1 # 20220457 –

3

Używam tej podstawowej struktury dla wszystkich moich walidacji JS, który robi to, co Twój pytaniem

$('#form').on('submit', function() { 
    // check validation 
    if (some_value != "valid") { 
     return false; 
    } 
}); 

Nie trzeba e.preventDefault(); i return false; oświadczenie, oni robią to samo.

+1

Niezupełnie. 'return false' w module obsługi zdarzenia jQuery =' e.preventDefault() 'i' e.stopPropagation() ' –

+0

To jest dobre dla tych, którzy nie używają wbudowanego sprawdzania poprawności –

0

Wtyczka zapewnia wywołania zwrotne dla prawidłowych i nieprawidłowych prób przesyłania formularzy. Jeśli podasz wywołanie metody submitHandler, formularz nie zostanie automatycznie przesłany do serwera.

$("#step1form").validate({ 
    submitHandler : function() 
    { 
     // the form is valid 
     $(".first_step_form").fadeOut(); 
     if(counter == 3){ 
      $(".second_step_summary").fadeIn(); 
      // etc 
     } 
    } 
}); 
Powiązane problemy