2013-08-13 2 views
13

Ho un'applicazione Web HTML5 con numerosi campi immessi dall'utente e vorrei eseguire alcune convalide sul lato client su quei campi in javascript prima di inviarli al server. Facile vero? Basta usare il plugin di convalida JQuery --- http://jqueryvalidation.org/Convalida i campi usando la convalida JQuery senza alcun invio?

Ma c'è un problema. La mia app Web non ha moduli. Non è presente alcuna presentazione in HTML. Invece c'è un gestore di modifiche JQuery su ogni elemento modificabile dall'utente, e quando l'utente cambia il valore di uno di questi elementi, viene effettuata una chiamata AJAX. (Questa architettura di interazione utente non standard ha senso per questa applicazione.)

Vorrei convalidare il campo prima della chiamata AJAX e utilizzare il plug-in di convalida JQuery per farlo. Ma non riesco a capire come.

È possibile utilizzare il plug-in di convalida JQuery senza un invio da nessuna parte? Come lo farei? O è un altro approccio migliore?

risposta

39

In primo luogo, e cosa più importante, è necessario avvolgere le elementi di input all'interno <form></form> tag per il plugin jQuery Convalida per operare. Tuttavia, non è richiesto un pulsante di invio.

In secondo luogo, è possibile programatically innescare il test di validità di uno o tutti gli elementi senza un pulsante di invio utilizzando the .valid() method.

$(document).ready(function() { 

    $('#myform').validate({ // initialize the plugin on your form. 
     // rules, options, and/or callback functions 
    }); 

    // trigger validity test of any element using the .valid() method. 
    $('#myelement').valid(); 

    // trigger validity test of the entire form using the .valid() method. 
    $('#myform').valid(); 

    // the .valid() method also returns a boolean... 
    if ($('#myform').valid()) { 
     // something to do if form is valid 
    } 

}); 

DEMO: http://jsfiddle.net/URQGG/

1

È necessario avvolgere i campi in un modulo per utilizzare il plug-in di convalida ed è comunque un good practice. Inoltre, è possibile richiamare la convalida del plugin di programmazione e verificare se il modulo è valido facendo:

var $form = $('#your_form'), 
    validator = $form.validate({...}); 

//validate the form 
validator.form(); 

//check if the form is valid 
if ($form.valid()) { 
    //form is valid 
} 

Per ulteriori opzioni, hanno uno sguardo al docs.

+1

Qual è lo scopo di assegnare l'oggetto a una variabile? Una riga aggiuntiva per salvare un paio di caratteri sembra prolissa quando puoi semplicemente chiamare '$ ('# your_form'). Validate()' e '$ ('# your_form'). Valid()'. (Inoltre, non è necessario chiamare 'validator.form()'). – Sparky

+0

@Sparky, ci sono diversi metodi che possono essere richiamati solo sul validatore restituito dalla funzione 'validate', quindi è una buona idea per mantenere un riferimento ad esso se necessario. Inoltre, è una cattiva pratica quella di riordinare sempre il DOM per ottenere elementi a cui si fa riferimento più volte. – plalx

+0

Sì, ma in questo caso esiste un metodo disponibile chiamato '.valid()' che elimina la necessità di tenere traccia di '.validate()'. Inoltre, non sono sicuro che il vantaggio di jQuery di non guardare nel DOM una seconda volta valga gli oltre 40 caratteri in più.Ad ogni modo, suppongo che stiamo dividendo i capelli perché qui non c'è nulla di tecnicamente sbagliato. – Sparky

0

ho creato un piccolo aiutante. Basta aggiungere questa riga di codice e quindi puoi usare qualsiasi pulsante ovunque.

$("body [data-submit-form]").on("click", function (event) { 
    $("#" + $(event.target).data('submit-form')).valid(); 
}); 

<form id="component-form"> 

</form> 

<button data-submit-form="component-form">Button</button> 

Spiegazione: Il codice jQuery in ascolto di tutti i clic su un elemento con l'attributo 'data-submit-forma', in chi ascolta i dati attributo viene estratto e poi ho innescare il metodo valido sul modulo corrispondente .

NOTA: se si desidera inviare il modulo se il modulo è valido, utilizzare questo codice:

$("body [data-submit-form]").on("click", function (event) { 
    var form = $("#" + $(event.target).data('submit-form')); 
    if (form.valid()) { 
     form.submit(); 
    } 
});