Con el que estoy trabajando ASP.Net MVC3
, la forma más fácil de usar la validación del cliente sería habilitar jquery.validate.unobtrusive
. Todo funciona bien, para cosas que vienen directamente del servidor.
Pero cuando trato de inyectar algunas 'entradas' nuevas con javascript, y sabía que tenía que llamar $.validator.unobtrusive.parse()
para volver a enlazar las validaciones. Pero aún así, todos esos campos inyectados dinámicos no están funcionando.
Peor aún, trato de enlazar manualmente usando jquery.validate
y tampoco funciona. ¿Alguna idea?
Respuestas:
Creé una extensión para la biblioteca jquery.validate.unobtrusive que resolvió este problema para mi situación; podría ser de interés.
http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/
fuente
$.validator.unobtrusive.parse()
. Además, parece que solo agrega nuevas reglas, pero no recoge actualizaciones de las reglas existentes.Probé el enfoque de Xhalent, pero desafortunadamente no funcionó para mí. El enfoque de Robin funcionó y no funcionó. Funcionó muy bien para elementos agregados dinámicamente, pero si intentara usar JQuery para eliminar todos los atributos de validación y los intervalos del DOM, la biblioteca de validación aún intentaría validarlos.
Sin embargo, si elimina los datos de "validación discreta" del formulario además de "validationData", funcionó como un encanto para agregar y eliminar dinámicamente elementos que desea validar o no validar.
fuente
validator
que no está definido? Tengo referencias de validación y validación. La validación funciona hasta que llamo a estos códigos$('#form').validate({ignore: ""})
De hecho, me gusta mucho la simplicidad de la solución @viggity y @Robins, así que la convertí en un pequeño complemento rápido:
Uso de ejemplo:
fuente
Estoy teniendo el mismo problema. Descubrí que no es posible llamar a $ .validator.unobtrusive.parse () en el mismo formulario dos veces. Cuando se carga el formulario inicialmente desde el servidor, la biblioteca discreta analiza el formulario automáticamente. Cuando agrega un elemento de entrada dinámicamente al formulario y llama a $ .validator.unobtrusive.parse () nuevamente, no funcionará. Lo mismo ocurre con parseElement ().
La lib discreta llama al método validate del complemento jquery validate para establecer todas las reglas y mensajes. El problema es que, cuando se vuelve a llamar, el complemento no actualiza el nuevo conjunto de reglas que se le da.
Encontré una solución cruda: antes de llamar al método de análisis en la biblioteca discreta, desecho el validador de formularios:
Ahora, cuando el método de validación es llamado por la biblioteca discreta, todas las reglas y mensajes se recrean, incluidas las entradas agregadas dinámicamente.
Espero que esto ayude
fuente
Estoy usando MVC 4 y JQuery 1.8, parece que se necesita el siguiente código para permitir que Jquery valide el contenido inyectado dinámicamente a través de Ajax o Jquery en el DOM.
He creado una función modular que acepta el objeto Jquery del elemento recién agregado. Si ha clonado una nueva tabla con id
tblContacts
usando Jquery al hacer clic en un botón, incluya la función a continuación en su archivo jsy llámalo así:
fuente
¿Por qué no utilizar la función de reglas directamente desde el documento de validación de jquery? Me gusta esto:
fuente
Tomando de la solución de Xhalent marcada como respuesta anterior, la amplié un poco.
Básicamente, todavía funciona igual que la solución de Xhalent anterior, pero agregué la capacidad de eliminar reglas para los elementos que eliminas del dom. Entonces, cuando elimine elementos del Dom y desee que también se eliminen esas reglas de validación, llame a:
fuente
Encontré el script de código de @ Xhalent en mi código e iba a eliminarlo porque no lo estaba usando, lo que me llevó a esta pregunta SO.
Este código es bastante limpio y simple:
Luego, para llamar a esta extensión jQuery, simplemente use un selector para tomar su formulario:
¡Viola!
fuente
Probé la respuesta de Viggity y al principio todo pareció funcionar. Pero después de un tiempo me di cuenta de que la validación se vuelve dolorosamente lenta cuanto más dinámicamente agregué elementos. La razón fue que su solución no desvincula los controladores de eventos, sino que agrega nuevos cada vez. Entonces, si agrega 5 elementos, la validación se ejecuta 6 veces en lugar de solo una vez. Para solucionar este problema, debe desvincular los eventos además de las llamadas removeData.
fuente
En caso de contenido dinámico, debe actualizar las validaciones discretas como se muestra a continuación y verificar si
Form
es válido durante el envío.fuente
He estado jugando con esto por un tiempo, descartando soluciones y volviéndolo a intentar más tarde (cuando tenía algo de tiempo libre, lo creas o no).
No estoy seguro de si este comportamiento habría cambiado en las versiones más recientes de jquery (estamos usando 1.7.2) desde que este hilo fue creado o comentado por última vez, pero encontré que
.parseElement(inputElement)
funciona bien cuando trato de agregar elementos creados dinámicamente a un formulario que ya tiene un validador cargado. Esto ya fue sugerido por @jamesfm (15 de febrero de 2011) en uno de los comentarios anteriores, pero lo pasé por alto las primeras veces que estuve trabajando en esto. Así que lo agrego como una respuesta separada para que sea más obvio y porque creo que es una buena solución y no requiere demasiada sobrecarga. Puede que no sea relevante para todas las cuestiones planteadas en las respuestas posteriores, pero creo que sería una solución a la pregunta original. Así es como hice funcionar el mío:fuente
En primer lugar, creo que la llamada debe ser a .validator, no validar, entonces debe pasar la identificación del formulario
fuente
Si necesita agregar y eliminar cosas con la posibilidad de que ya se muestren algunos errores, esto es lo que vine. Se basa principalmente en diferentes ideas de esta página de preguntas. Utilizo el integrado en
destroy()
lugar de simplemente eliminar el atributo de datos para la validación de JQuery.Lo llama antes de modificar dinámicamente las entradas en el formulario. Luego reinicializa la validación después.
Nota: Si algunas o todas las entradas se han validado y tienen errores, esos errores se restablecerán ... pero volverán correctamente en la próxima validación.
fuente