En la nueva versión de jQuery, el plugin de validación 1.9 por defecto ignora la validación de los campos ocultos . Estoy usando CKEditor para el campo de entrada de área de texto y oculta el campo y lo reemplaza con iframe. El campo está allí, pero la validación está deshabilitada para los campos ocultos. Con el complemento de validación versión 1.8.1 todo funciona como se esperaba.
Entonces mi pregunta es cómo habilitar la validación para campos ocultos con el complemento de validación v1.9.
Esta configuración no funciona:
$.validator.setDefaults({ ignore: '' });
jquery-validate
Chamán
fuente
fuente
<input type="text" name="myfield" id="myfield" required="required" style="display: none;">
. No tuve que cambiar ninguna configuración ni hacer nada especial.Respuestas:
El autor del complemento dice que debe usar "corchetes sin las comillas" ,
[]
http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/
Para cambiar esta configuración para todos los formularios:
(No se requiere que
.setDefaults()
esté dentro de ladocument.ready
función)O para una forma específica:
EDITAR :
Vea esta respuesta para saber cómo habilitar la validación en algunos campos ocultos pero ignorar otros.
EDITAR 2 :
Antes de dejar comentarios de que "esto no funciona" , tenga en cuenta que el OP simplemente pregunta sobre el complemento jQuery Validate y su pregunta no tiene nada que ver con cómo ASP.NET, MVC o cualquier otro marco de Microsoft puede alterar la normalidad de este complemento comportamiento esperado. Si está utilizando un marco de Microsoft, el funcionamiento predeterminado del complemento jQuery Validate se sobrescribe con el
unobtrusive-validation
complemento de Microsoft .Si tiene problemas con el
unobtrusive-validation
complemento, consulte esta respuesta: https://stackoverflow.com/a/11053251/594235fuente
Esto funcionó para mí, dentro de un sitio ASP.NET MVC3 donde había dejado el marco para configurar una validación discreta, etc., en caso de que sea útil para alguien:
fuente
Asegúrate de poner
NO adentro
$(document).ready
fuente
$.validator.setDefaults()
se coloca dentro o fuera del manipulador listo para DOM. Compare este jsFiddle con este jsFiddle .Así que voy a profundizar un poco más sobre por qué esto no funciona porque soy el tipo de persona que no puede dormir por la noche sin saber jaja. Estoy usando jQuery validate 1.10 y Microsoft jQuery Nobtrusive Validation 2.0.20710.0 que se publicó el 29/01/2013.
Comencé buscando el método setDefaults en jQuery Validate y lo encontré en la línea 261 del archivo sin minificar. Todo lo que esta función realmente hace es fusionar su configuración json con la existente,
$.validator.defaults
que se inicializa con la propiedad ignorar configurada en ": oculto" junto con los otros valores predeterminados definidos en jQuery Validate. Entonces, en este punto, hemos ignorado ignorar. Ahora veamos dónde se hace referencia a esta propiedad predeterminada.Cuando rastreé el código para ver dónde
$.validator.defaults
se hace referencia. Me di cuenta de que solo estaba siendo utilizado por el constructor para un validador de formularios, la línea 170 en jQuery validate unminmin file.En este punto, un validador fusionará cualquier configuración predeterminada que se haya establecido y la adjuntará al validador de formularios. Cuando miras el código que está validando, resaltando, resaltando, etc., todos usan el objeto validator.settings para extraer la propiedad ignorar. Por lo tanto, debemos asegurarnos de que si establecemos el ignorar con el método setDefaults, debe ocurrir antes de que se invoque $ ("form"). Validate ().
Si está utilizando Asp.net MVC y el complemento discreto, se dará cuenta después de mirar el javascript que valida se llama en document.ready. También llamé a mi setDefaults en el bloque document.ready que se ejecutará después de los scripts, jquery validate y discreto porque he definido esos scripts en el html antes del que tiene la llamada. Entonces, mi llamada obviamente no tuvo impacto en la funcionalidad predeterminada de omitir elementos ocultos durante la validación. Hay un par de opciones aquí.
Opción 1 : podría, como Juan Mellado señaló, tener la llamada fuera del documento lista, que se ejecutará tan pronto como se haya cargado el script. No estoy seguro sobre el momento de esto ya que los navegadores ahora son capaces de cargar secuencias de comandos paralelas. Si solo soy demasiado cauteloso, corrígeme. Además, probablemente hay formas de evitar esto, pero para mis necesidades no seguí este camino.
Opción 2a : la apuesta segura en mis ojos es simplemente reemplazar el
$.validator.setDefaults({ ignore: '' });
interior del evento document.ready con$("form").data("validator").settings.ignore = "";
. Esto modificará la propiedad de ignorar que realmente utiliza jQuery validate cuando realiza cada validación en sus elementos para el formulario dado.Opciones 2b : después de examinar el código un poco más, también podría usarlo
$("form").validate().settings.ignore = "";
como una forma de establecer la propiedad ignorar. La razón es que, al observar la función de validación, verifica si un objeto de validación ya se ha almacenado para el elemento de formulario a través de la$.data()
función. Si encuentra un objeto de validación almacenado con el elemento de formulario, simplemente devuelve el objeto de validación en lugar de crear otro.fuente
Esto funcionó para mí dentro de un sitio ASP.NET. Para habilitar la validación en algunos campos ocultos, use este código
$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";
Para habilitar la validación de todos los elementos del formulario, use este
$("form").data("validator").settings.ignore = "";
Tenga en cuenta que los use dentro de
$(document).ready(function() { })
fuente
Recién agregado
ignore: []
en la página específica para el formulario específico, esta solución funcionó para mí.fuente
Esto es trabajo para mí.
fuente
La validación estaba funcionando para mí en el envío del formulario, pero no estaba haciendo la validación impulsada por evento reactivo en la entrada a las listas de selección elegidas.
Para solucionar esto, agregué lo siguiente para activar manualmente el evento de validación jquery que la biblioteca agrega:
jquery.validate ahora agregará la
.valid
clase a la lista de selección subyacente.Advertencia: Esto requiere un patrón html consistente para sus entradas de formulario. En mi caso, cada entrada archivada está envuelta en un
div.form-group
, y cada entrada tiene.form-control
.fuente
Simplemente encuentre el texto ignore: ": hidden" en su archivo de validación jquery y coméntelo. Después de comentar esto, nunca perderá ningún elemento oculto para validar ...
Gracias
fuente