validate validar submithandler formulario form before jquery-validate

validar - jQuery Validate-Habilita validación para campos ocultos



validar formulario jquery validate (8)

Acaba de agregar ignore: [] en la página específica para el formulario específico, esta solución funcionó para mí.

$("#form_name").validate({ ignore: [], onkeyup: false, rules: { }, highlight:false, });

En la nueva versión del complemento de validación de jQuery 1.9, la validación por defecto de los campos ocultos se ignora . Estoy usando CKEditor para el campo de entrada textarea y oculta el campo y lo reemplaza con iframe. El campo está ahí, 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 los campos ocultos con el complemento de validación v1.9.

Esta configuración no funciona:

$.validator.setDefaults({ ignore: '''' });


Así que voy a profundizar un poco 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 Unobtrusive Validation 2.0.20710.0 que se publicó el 1/29/2013.

Empecé buscando el método setDefaults en jQuery Validate y lo encontré en la línea 261 del archivo no modificado. Todo lo que esta función realmente hace es fusionar la configuración de json en los $.validator.defaults existentes que se inicializan con la propiedad de ignorar establecida en ": hidden" junto con los otros valores predeterminados definidos en jQuery Validate. Entonces, en este punto, hemos anulado ignorar. Ahora veamos dónde se hace referencia a esta propiedad predeterminada.

Cuando $.validator.defaults el código para ver dónde se hace referencia a $.validator.defaults . Noté que el constructor solo lo estaba utilizando para un validador de formularios, la línea 170 en jQuery valida un archivo no modificado.

// constructor for validator $.validator = function( options, form ) { this.settings = $.extend( true, {}, $.validator.defaults, options ); this.currentForm = form; this.init(); };

En este punto, un validador combinará las configuraciones predeterminadas que se establecieron y las adjuntará al validador de formularios. Cuando mira el código que está validando, resaltando, descolgando, etc., todos usan el objeto validator.settings para extraer la propiedad de ignorar. Por lo tanto, debemos asegurarnos de que si establecemos la opción ignorar con el método setDefaults, debe ocurrir antes de que se llame al $ ("form"). Validate ().

Si está utilizando Asp.net MVC y el complemento discreto, se dará cuenta luego de consultar el javascript que se valida validar en document.ready. También llamé a mis setDefaults en el bloque document.ready que se va a ejecutar después de los scripts, jquery validate y discreto porque he definido esos scripts en el html antes del que tiene la llamada. Así que 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 señaló Juan Mellado, tener la llamada fuera del documento. Preparado, que se ejecutará tan pronto como se haya cargado el script. No estoy seguro del momento oportuno, ya que los navegadores ahora pueden realizar la carga de scripts paralelamente. Si solo estoy siendo precavido, por favor corrígeme. Además, probablemente haya formas de evitar esto, pero para mis necesidades no seguí este camino.

Opción 2a : la apuesta segura en mi opinión es simplemente reemplazar el $.validator.setDefaults({ ignore: '''' }); dentro del evento document.ready con $("form").data("validator").settings.ignore = ""; . Esto modificará la propiedad de ignorar que es utilizada por jQuery validate al hacer cada validación en sus elementos para el formulario dado.

Opciones 2b : después de mirar el código un poco más, también puede usar $("form").validate().settings.ignore = ""; como una forma de establecer la propiedad de ignorar. La razón es que cuando se mira la función de validación comprueba si ya se ha almacenado un objeto validador para el elemento de formulario a través de la función $.data() . Si encuentra un objeto validador almacenado con el elemento de formulario, simplemente devuelve el objeto validador en lugar de crear otro.


Asegúrate de poner

$.validator.setDefaults({ ignore: '''' });

NO dentro de $(document).ready


El autor del complemento dice que debe usar "corchetes sin las comillas" , []

http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/

Release: Validation Plugin 1.9.0: "... Otro cambio debería facilitar la configuración de formularios con elementos ocultos, estos ahora se ignoran por defecto (la opción" ignorar "tiene": oculto "ahora por defecto). En teoría, esto podría romper una configuración existente. En el caso improbable de que realmente lo haga, puede solucionarlo estableciendo la opción ignorar en "[]" (corchetes sin las comillas). "

Para cambiar esta configuración para todos los formularios:

$.validator.setDefaults({ ignore: [], // any other default options and/or rules });

(No es necesario que .setDefaults() esté dentro de la función document.ready )

O para una forma específica:

$(document).ready(function() { $(''#myform'').validate({ ignore: [], // any other options and/or rules }); });

EDITAR :

Consulte esta respuesta para saber cómo habilitar la validación en algunos campos ocultos, pero aún ignorar otros.

EDICION 2 :

Antes de dejar comentarios que "esto no funciona" , tenga en cuenta que el OP simplemente pregunta por 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 trabajo de Microsoft, el complemento predeterminado de jQuery Validate está unobtrusive-validation complemento de unobtrusive-validation de Microsoft.

Si está luchando con el complemento de unobtrusive-validation , consulte esta respuesta en su lugar: https://.com/a/11053251/594235


Esto es trabajo para mí.

jQuery("#form_name").validate().settings.ignore = "";


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 para todos los elementos del formulario use este $("form").data("validator").settings.ignore = "";

Tenga en cuenta que utilícelos dentro de $(document).ready(function() { })


Esto funcionó para mí, dentro de un sitio ASP.NET MVC3 donde había dejado el marco para configurar una validación no intrusiva, etc., en caso de que sea útil para cualquier persona:

$("form").data("validator").settings.ignore = "";


Simplemente encuentre el texto ignore: ": oculto" en su archivo de validación jquery y coméntelo. Después de comentar esto, nunca perderá ningún elemento oculto para validar ...

Gracias