2010-06-13 9 views
49

Sto cercando di aggiungere dinamicamente una regola di convalida per alcuni controlli dinamici:jQuery - Come aggiungere dinamicamente una regola di convalida

$("input[id*=Hours]").rules("add", "required"); 

Tuttavia questa linea mi dà il seguente errore:

$. data (element.form, "validator") è null

La definizione delle regole in modo statico con la funzione di convalida funziona correttamente. Che cosa sto facendo di sbagliato?

Grazie, Justin

risposta

95

è necessario chiamare .validate() prima di poter aggiungere le regole in questo modo, in questo modo:

$("#myForm").validate(); //sets up the validator 
$("input[id*=Hours]").rules("add", "required"); 

Il .validate() documentation è una buona guida, ecco la fascetta pubblicitaria su .rules("add", option):

Adds the specified rules and returns all rules for the first matched element. Requires that the parent form is validated, that is, $("form").validate() is called first.

+3

Grazie, chiamando convalidare prima risolto tale errore. Comunque convalida solo il primo input con un id come Hours invece di convalidarli tutti, qualche idea del perché? – Justin

+0

Ogni ID deve essere considerato un elemento unico nel DOM - forse vuoi usare una classe qui? – cars

+0

jquery convalida il lavoro con l'attributo name dell'input non l'Id, forse questo è il tuo problema Justin –

2

The documentation dice:

Adds the specified rules and returns all rules for the first matched element. Requires that the parent form is validated, that is, $("form").validate() is called first.

Lo hai fatto? Il tipo di messaggio di errore indica che non l'hai fatto.

3

Oltre a verificare di aver chiamato per la prima volta $("#myForm").validate();, assicurarsi che il controllo dinamico sia stato aggiunto al DOM prima di aggiungere le regole di convalida.

20

di convalidare tutti gli elementi generati in modo dinamico potrebbe aggiungere una classe speciale per ognuno di questi elementi e utilizzare ogni funzione(), qualcosa come

$("#DivIdContainer .classToValidate").each(function() { 
    $(this).rules('add', { 
     required: true 
    }); 
}); 
+1

funziona come un charm :-) –

+0

E i messaggi? ecco un esempio dalla documentazione https://jqueryvalidation.org/rules/#example:-adds-minlength:-2-to-an-element-which-is-already-required –

Problemi correlati