2010-06-13 25 views
49

Estoy tratando de agregar dinámicamente una regla de validación de algunos controles dinámicos:jQuery - Cómo agregar dinámicamente una regla de validación

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

Sin embargo esta línea me da el siguiente error:

$. data (element.form, "validator") es nulo

La definición de reglas de la manera estática con la función de validación funciona bien. ¿Qué estoy haciendo mal?

Gracias, Justin

Respuesta

95

es necesario llamar a .validate() antes de poder agregar reglas de esta manera, así:

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

El .validate() documentation es una buena guía, aquí está la propaganda sobre .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

Gracias, llamando a validar primero se resolvió el error. Sin embargo, solo está validando la primera entrada con una identificación como Horas en lugar de validar todas, ¿alguna idea de por qué? – Justin

+0

Cada ID debe considerarse como un elemento único en el DOM. ¿Tal vez quiera usar una clase aquí? – cars

+0

jquery validar el trabajo con el atributo de nombre de la entrada no el Id, tal vez ese sea su 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 hiciste? El tipo de mensaje de error indica que no lo hizo.

3

Además de asegurarse de haber llamado primero al $("#myForm").validate();, asegúrese de que su control dinámico se haya agregado al DOM antes de agregar las reglas de validación.

20

Para validar todos los elementos generados dinámicamente podría añadir una clase especial para cada uno de estos elementos y el uso de cada función(), algo así como

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

funciona como una encanto :-) –

+0

¿qué pasa con los mensajes? aquí hay un ejemplo de la documentación https://jqueryvalidation.org/rules/#example:-adds-minlength:-2-to-an-element-which-is-already-required –

Cuestiones relacionadas