2010-09-26 19 views
8

Sto utilizzando il plugin di convalida jQuery per convalidare un modulo. Sai come forzare la riconvalida sui campi precedentemente riusciti con successo?jQuery Plugin di convalida: come posso forzare la convalida su campi precedentemente validi?

ho provato la funzione .Form utilizzando il seguente controllo (questa viene eseguita dopo l'utente fa clic 'submit'):

if ($('#form1').validate().form()==false) 
{ 
    formValid = false; 
} 

Tuttavia, sembra che il codice di cui sopra non si riconnette la convalida in modo che i campi sono già validati con successo (cioè hanno spuntato accanto a loro) non vengono controllati di nuovo.

Il motivo per cui si desidera provare nuovamente la convalida su campi precedentemente riusciti è che si basano sulla convalida remota e che il risultato (esito positivo o negativo) può cambiare tra l'utente che lascia il campo e fare clic su Invia. (Questo vale per un campo "nome utente").

Nel caso in cui influenzi la risposta, ho più moduli da convalidare (per semplicità, nello snippet di codice sopra rimando solo a "# form1").

Grazie in anticipo per qualsiasi consiglio,

Rob

risposta

17

Lo stato di convalida per i campi remoti vengono memorizzati tramite $.data() con l'elemento che si desidera convalidare, quindi si può usare per cancellare .removeData() che fuori .. .so è costretta a rinnovare:

$("#form1 :input").removeData("previousValue"); 
//now call .valid() 

Questo costringe il controllo se il valore è cambiato (abbiamo bisogno di rinnovare) per essere true:

Se ci sono solo campi specifici che necessitano di una nuova convalida, come hai detto username, potresti voler limitare il selettore $("#form1 :input") solo ai campi che vuoi, per renderlo un po 'più efficiente.

+0

Eccellente - questo cancella perfettamente la convalida, grazie Nick ... anche se un altro problema è ritagliata! Poiché ora riconvalida tutti i moduli, viene visualizzato un errore in javascript: "Impossibile caricare la risorsa: annullato". Il problema si verifica solo quando nella pagina sono presenti più moduli (che è un'azione guidata dall'utente, poiché i moduli vengono creati dinamicamente). Eventuali suggerimenti? – Rob

+0

@Rob - Vorrei cancellare solo le opzioni remote con questo, risparmierà il maggior numero di grattacapi, puoi farlo con un selettore più specifico di quello che ho sopra? Inoltre, ricontrollerei solo quello che stai inviando. –

+0

da alcuni debug sembra che l'errore "Impossibile caricare la risorsa" si verifica quando .validate(). Form() viene chiamato contemporaneamente per due input di modulo con lo stesso nome. Ho bisogno di controllare tutti gli input su invio in modo che anche il selettore più specifico produca ancora il problema. L'errore non si verifica se richiamo manualmente .validate(). Form() manualmente su ogni modulo in modo sequenziale con un'azione guidata dall'utente (ad esempio facendo clic su un pulsante "convalida") ... quindi sembra che sia necessario convalidare il modulo in sequenza (Vale a dire solo chiamare la convalida del modulo successivo dopo la convalida riuscita del primo) ... qualche suggerimento? – Rob

Problemi correlati