Nota:
Esta pregunta se refiere a una versión muy antigua de jQuery.validate() (versión 1.5). Este complemento ahora proporciona una solución integrada para hacer esto: el .rules()
method que se debe usar en su lugar. Dejo esta pregunta y respuesta en su forma original para fines históricos para cualquier persona que necesite mantener un sitio heredado que no puede actualizar a las últimas versiones de jQuery y jQuery.validate().¿Cómo puedo agregar, eliminar o cambiar las reglas de validación jQuery de una página?
Tengo un formulario que alterna qué elementos de entrada son visibles. Quiero validar solo los elementos visibles en el formulario.
Me está costando conseguir que esto funcione correctamente. Quiero desactivar validadores para elementos no visibles y parece que no puedo encontrar la mejor manera de hacerlo. Cualquier información sobre lo que puede estar mal con mi código, o mi enfoque sería apreciado.
Cuando se activa la visibilidad, lo he intentado un par de cosas:
- Calling
$("form").rules("remove")
para borrar todas las reglas de validación existentes. Esto arroja una excepción de JavaScript "indefinida". - Llamando
$("form").validation(...options...)
para los elementos visibles, esperando que esto sobrescriba las reglas. Esto solo permite que el primer grupo que se valida funcione. El segundo panel no puede ser validado. - Desvinculación del manejador de envío antes de llamar al nuevo método
validation()
. Esto no hizo lo que yo hubiera pensado. Elimina toda validación (aparentemente) de forma permanente y el formulario se envía sin validación. - Limpiar el objeto de validación con
$.removeData($('form'), 'validator')
antes de intentar llamar al validador nuevamente. Esto tampoco funciona. - Esto se encuentra en un sitio ASP.NET, por lo que no es posible utilizar varias etiquetas
<form />
ya que eso rompería la página.
Estoy algo perplejo sobre cómo puedo hacer que esto funcione. Puede ver una demostración de trabajo completa de lo que tengo en http://jsbin.com/ucibe3
, o editarla en http://jsbin.com/ucibe3/edit
. Intenté reducirlo a solo el código que causa el error.
Estas son las piezas clave de mi código (aplicaciones de enlaces para la página completa de trabajo)
HTML:
<td id="leftform">
Left Form<br />
Input 1: <input type="text" name="leftform_input1" /><br />
Input 2: <input type="text" name="leftform_input2" /><br />
<input type="submit" name="leftform_submit" value="Submit Left" />
</td>
<td id="rightform" style="visibility:hidden">
Right Form<br />
Input 1: <input type="text" name="rightform_input1" /><br />
Input 2: <input type="text" name="rightform_input2" /><br />
<input type="submit" name="rightform_submit" value="Submit Right" />
</td>
JavaScript:
$('#toggleSwitch').click(function() {
if ($('#leftform').css("visibility") !== "hidden") {
$('#leftform').css("visibility", "hidden");
$('#rightform').css("visibility", "visible");
$('form').validate({
rules: {
rightform_input1: { required: true },
rightform_input2: { required: true }
},
messages: {
rightform_input1: "Field is required",
rightform_input2: "Field is required"
}
});
} else {
$('#rightform').css("visibility", "hidden");
$('#leftform').css("visibility", "visible");
$('form').validate({
rules: {
leftform_input1: { required: true },
leftform_input2: { required: true }
},
messages: {
leftform_input1: "Field is required",
leftform_input2: "Field is required"
}
});
}
});
Lo siento, me perdí la marca con la otra respuesta, he agregado un enlace a una posible solución en mi post- Espero que ayude. –
2014 - ahora existen varios complementos de validación y, aunque puedo hacer una suposición fundamentada, no está claro a qué complemento se refiere esta pregunta. Una fuente de enlace sería útil. –
@ Roamer-1888 Buen punto. He actualizado la pregunta y la respuesta para especificar el complemento, así como la versión a la que se aplica, ya que esta pregunta y respuesta se refieren a una versión obsoleta del complemento y ya no son relevantes. –