2011-11-24 15 views
12

Ho un modulo che utilizza html5 per convalidare i campi email e richiesti. Il modulo deve essere inviato tramite ajax. Come faccio a determinare se il modulo ha superato la convalida prima di consentire alla scheda di essere inviata tramite ajax.Come verificare se la convalida del modulo html5 è completa

Questo è il mio html:

<form action="" method="post" id="comment_form"> 
    <input type="hidden" name="post_id" value="<?=$post->ID ?>" /> 
    <label for="name">Name</label> 
    <input type="text" name="name" required="required"> 

    <label for="email">Email Address</label> 
    <input type="email" name="email" required="required"> 


    <label for="comment">Comment</label> 
    <textarea name="comment" required="required" > 
    </textarea> 


    <label for="submit"></label> 
    <button type="submit"class="button green meduim" id="comment_btn">Submit</button> 
</form> 

Questo è il mio jQuery

$("#comment_btn").click(function(e){ 
    //the request url 
    var url = site_url+'comments/post_comment'; 
    //cross site request forgery token 
    var xtoken = $("input[name='xtoken']").val(); 
    //post data 
    var dataObj = { 
    "name":$('#name').val(), 
    "email":$("#email").val(), 
    "comment":$("#comment").val(), 
    "post_id":$("input[name='post_id']").val(), 
    "xtoken":xtoken 
    }; 
    //dim form 
    $('#comment_form').addClass('dim'); 
    //make request 
    $.ajax({ 
    url:url, 
    type:'POST', 
    data:dataObj, 
    dataType:'json', 
    error:function() {}, 
    success:function(resp) { 
     if(resp.status == "ok") 
     { 
     $('#comment_form').removeClass('dim'); 
     }else { 
     alert("An error was encountered"); 
     } 
    } 
    }); 
    e.preventDefault(); 
}); 

C'è un modo per determinare se il modulo viene convalidato?

+0

Si può semplicemente dire 'required' invece di' required = "required" '. –

risposta

6

È possibile utilizzare la funzione form() del validatore, ad es.

var validator = $("#comment_form").validate(options); 
if (validator.form()) { 
    // submit with AJAX 
} 
1

E 'probabilmente meglio non fare affidamento sul browser per convalidare i dati, sicuro utilizzando required e pattern è fresco e tutti, ma non vorrei dipendere da esso.

Scrivi la tua convalida nel tuo javascript prima che i dati vengano inviati al tuo URL. Puoi farlo con un po 'di Regex oppure potresti utilizzare molti dei plugin di convalida jQuery disponibili come h5validate o Validation.

34

Non legare all'evento click del pulsante di invio semplicemente associare all'evento inviare del modulo:

$('#comment_form').submit(function(e){ 
    e.preventDefault(); 
    //submit via ajax 
}); 
+0

Breve, conciso, al punto = elegante. Questa è la risposta migliore, ovviamente. – PALEN

+1

Questa dovrebbe essere accettata risposta. –

0

è possibile registrarsi per forma standard 'onSubmit' evento che sarà licenziato se la forma ha superato la convalida e viene inviato.

document.getElementById("comment_form").onsubmit = myPassedValidationHandler; 
Problemi correlati