2011-12-15 17 views
5

Estoy usando el JQuery Validation plugin para manejar la validación del formulario.JQuery Validar: Validar un formulario oculto (posible error)

El problema que tengo es que cuando un formulario está oculto, el complemento de validación ignora los campos que deben validarse y salta directamente al enviar el formulario.

Ejemplo: http://jsfiddle.net/Qg5WQ/

he tenido una mirada a través del plug-in de options y buscado en Google este problema, pero no puedo encontrar nada que especifica qué se ignoran campos de un formulario oculto.

Vale la pena señalar que si hay dos formularios en una página, donde uno está oculto y se muestra uno, ambos formularios se validan correctamente si ambos formularios usan el mismo método de validación. Sin embargo, si llama a dos métodos de validación separados, los campos dentro del formulario oculto aún se ignoran.

Validación de dos formas utilizando la misma función de validación: http://jsfiddle.net/Qg5WQ/1/

Validación de dos formas utilizando diferentes funciones de validación: http://jsfiddle.net/Qg5WQ/2/

¿Alguien sabe si esto es un error o hay una específica forma de validar formularios ocultos?

+0

me enfrento a los mismos problemas, así que estoy haciendo mi propio código para validar el formulario. (cuando estoy en .aspx webform) – manny

Respuesta

11

probar este http://jsfiddle.net/Qg5WQ/3/

que añade el ignore: opción hidden a la llamada validate.

$("form").validate({ 
    ignore: 'hidden', 
    rules: { 
    "first": "required" 
    }, 
    invalidHandler: function() { 
    alert("error"); 
    }, 
    submitHandler: function(form) { 
    alert("no error"); 
    } 
}); 
+0

Gracias, eso extrañamente funciona. Parece que puedo agregar algo al campo de ignorar y funciona. Supongo que esto debe obligarlo a recorrer los campos, lo que me hace pensar que esto debe ser un error. ¡Gracias por la ayuda! –

+0

@MyHeadHurts - Sí, me di cuenta de eso, muy extraño, pero bueno, funciona de todos modos =) – Cyclonecode

+3

Solo una nota rápida de que la razón por la que esto funciona es porque le faltan dos puntos al frente de **: oculto **. Básicamente le está diciendo que ignore las etiquetas html ** ** que puedan existir en lugar de indicarle que ignore las entradas de tipo oculto. – Dominic

7

Si usted echa un vistazo a la opción ignore en el documentation page, se dice que el valor por defecto es :hidden. Esto obviamente significa que si no especifica explícitamente la opción ignore, la validación ignorará las entradas ocultas.

Simplemente defina la opción ignore (puede dejarse en blanco) y debería solucionar el problema.

$("form").validate({ 
    ignore: '', 
    rules: {"hidden_field": {required:true}} 
}); 
+0

+1 - gracias, eso explica por qué agregar algo en ignorar aún funcionaba –