2010-09-26 13 views
8

Estoy usando el complemento jQuery Validation para validar un formulario. ¿Sabe cómo forzar la revalidación en previamente exitosos campos?Plugin de validación jQuery: ¿Cómo puedo forzar la validación en campos previamente válidos?

He tratado de la función .Form utilizando el siguiente cheque (esto se lleva a cabo después de que el usuario haga clic en 'enviar'):

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

Sin embargo, parece que el código anterior no vuelve a intentar la validación de modo que los campos ya están validados con éxito (es decir, tienen la marca al lado) no se vuelven a verificar.

La razón para querer reintentar la revalidación en campos previamente exitosos es que se basan en la validación remota y el resultado (éxito o falla) puede cambiar entre el usuario que abandona el campo y hacer clic en enviar. (Esto se aplica a un campo 'nombre de usuario').

En caso de que afecte la respuesta, tengo que validar varios formularios (para simplificar, en el fragmento de código anterior solo me refiero a '# form1').

Gracias de antemano por cualquier consejo,

Rob

Respuesta

17

El estado de validación de campos remotos se almacena a través $.data() con el elemento que desea validar, por lo que se podrían utilizar para limpiar .removeData() que fuera .. .so se ve obligado a revalidar:

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

Esto obliga a la verificación si el valor ha cambiado (que necesitamos para revalidar) para ser true:

//This code is in the validation plugin for remote: 
var previous = this.previousValue(element); 
if (previous.old !== value) { //this is normally false, since it hasn't changed 

Si solo hay campos específicos que necesiten volver a validar, como dicho nombre de usuario, puede restringir el selector $("#form1 :input") a solo los campos que desee, para que sea un poco más eficiente.

+0

Excelente - Cancela la validación perfectamente, gracias Nick ... aunque otro problema ha surgido! Debido a que ahora está revalidando todos los formularios, recibo un error en javascript: "Error al cargar el recurso: cancelado". El problema solo ocurre cuando tengo varios formularios en la página (que es una acción impulsada por el usuario, ya que los formularios se crean dinámicamente). ¿Alguna sugerencia? – Rob

+0

@Rob - Limpiaría solo las opciones remotas con esto, ahorrará más dolores de cabeza, ¿puedes hacerlo con un selector más específico que el anterior? Además, solo volvería a validar la que estás enviando. –

+0

de alguna depuración, parece que el error "Error al cargar el recurso" ocurre cuando se llama a .validate(). Form() simultáneamente para dos entradas de formulario con el mismo nombre. Necesito verificar todas las entradas en el envío así que incluso tener el selector más específico todavía produce el problema. El error no ocurre si invoco .validate(). Form() manualmente en cada formulario de forma secuencial con una acción impulsada por el usuario (por ejemplo, haciendo clic en un botón 'validar') ... así que parece que necesito validar el formulario en secuencia (es decir, solo llame a la validación del siguiente formulario después de la validación exitosa del primero) ... ¿alguna sugerencia? – Rob

Cuestiones relacionadas