Je travaille avec ASP.Net MVC3
, le moyen le plus simple d'utiliser la validation client serait d'activer le jquery.validate.unobtrusive
. Tout fonctionne bien, pour les éléments provenant directement du serveur.
Mais quand j'essaye d'injecter de nouvelles «entrées» avec javascript, et je savais que je devais appeler $.validator.unobtrusive.parse()
pour relier les validations. Mais encore, tous ces champs injectés dynamiques ne fonctionnent pas.
Pire encore, j'essaie de lier manuellement en utilisant jquery.validate
et cela ne fonctionne pas non plus. Des pensées?
Réponses:
J'ai créé une extension pour la bibliothèque jquery.validate.unobtrusive qui a résolu ce problème pour ma situation - cela pourrait être intéressant.
http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/
la source
$.validator.unobtrusive.parse()
. En outre, il semble uniquement ajouter de nouvelles règles, mais pas prendre les mises à jour des règles existantes?J'ai essayé l'approche de Xhalent mais malheureusement cela ne fonctionnait pas pour moi. L'approche de Robin a fonctionné et n'a pas fonctionné. Cela fonctionnait très bien pour les éléments ajoutés dynamiquement, mais si vous essayiez d'utiliser JQuery pour supprimer tous les attributs de validation et les étendues du DOM, la bibliothèque de validation essaierait toujours de les valider.
Cependant, si vous supprimez les données "unobtrusiveValidation" du formulaire en plus de "validationData", cela fonctionnait comme un charme pour ajouter et supprimer dynamiquement des éléments que vous souhaitez valider ou non.
la source
validator
n'est pas défini? J'ai à la fois la validation et la validation.unobtrusive référencée. La validation fonctionne jusqu'à ce que j'appelle ces codes$('#form').validate({ignore: ""})
En fait, j'aime beaucoup la simplicité de la solution @viggity et @Robins, alors je l'ai transformée en un petit plugin rapide:
Exemple d'utilisation:
la source
J'ai le même problème. J'ai découvert qu'il n'était pas possible d'appeler deux fois $ .validator.unobtrusive.parse () sur le même formulaire. Lors du chargement initial du formulaire à partir du serveur, le formulaire est analysé automatiquement par la bibliothèque discrète. Lorsque vous ajoutez dynamiquement un élément d'entrée au formulaire et que vous appelez à nouveau $ .validator.unobtrusive.parse (), cela ne fonctionnera pas. Il en va de même pour parseElement ().
La bibliothèque discrète appelle la méthode validate du plugin jquery validate pour définir toutes les règles et tous les messages. Le problème est que, lorsqu'il est appelé à nouveau, le plugin ne met pas à jour le nouvel ensemble de règles qu'il a donné.
J'ai trouvé une solution grossière: avant d'appeler la méthode parse sur la lib non obstructive, je jette le validateur de formulaire:
Désormais, lorsque la méthode validate est appelée par la bibliothèque discrète, toutes les règles et tous les messages sont recréés, y compris les entrées ajoutées dynamiquement.
J'espère que cela t'aides
la source
J'utilise MVC 4 et JQuery 1.8, il semble que le morceau de code suivant est nécessaire pour permettre à Jquery de valider le contenu injecté dynamiquement via Ajax ou Jquery dans le DOM.
J'ai créé une fonction modulaire qui accepte l'objet Jquery de l'élément nouvellement ajouté. Si vous avez cloné une nouvelle table avec id en
tblContacts
utilisant Jquery en cliquant sur un bouton, incluez la fonction ci-dessous dans votre fichier jset appelez-le comme ceci:
la source
Pourquoi ne pas utiliser la fonction rules directement à partir du doc de validation jquery. Comme ça:
la source
En prenant la solution de Xhalent marquée comme réponse ci-dessus, je l'ai un peu développé.
Donc, fondamentalement, cela fonctionne toujours de la même manière que la solution de Xhalent ci-dessus, mais j'ai ajouté la possibilité de supprimer les règles pour les éléments que vous supprimez du dom. Ainsi, lorsque vous supprimez des éléments du Dom et que vous souhaitez que ces règles de validation soient également supprimées, appelez:
la source
J'ai trouvé le script de code de @ Xhalent dans mon code et j'allais le supprimer parce que je ne l'utilisais pas, ce qui m'a conduit à cette question SO.
Ce code est assez propre et simple:
Ensuite, pour appeler cette extension jQuery, utilisez simplement un sélecteur pour saisir votre formulaire:
Alto!
la source
J'ai essayé la réponse de viggity et au début, tout a semblé fonctionner. Mais au bout d'un moment, j'ai remarqué que la validation devenait douloureusement lente avec les éléments plus dynamiques que j'avais ajoutés. La raison en est que sa solution ne dissocie pas les gestionnaires d'événements, mais en ajoute de nouveaux à chaque fois. Donc, si vous ajoutez 5 éléments, la validation est exécutée 6 fois au lieu d'une seule. Pour résoudre ce problème, vous devez dissocier les événements en plus des appels removeData.
la source
En cas de contenu dynamique, vous devez mettre à jour les validations discrètes comme ci-dessous et vérifier si
Form
est valide lors de la soumission.la source
Cela fait un moment que je tripote cela, abandonne des solutions et réessaye plus tard (quand j'avais du temps libre, croyez-le ou non).
Je ne sais pas si ce comportement aurait changé dans les versions plus récentes de jquery (nous utilisons la 1.7.2) depuis que ce fil a été créé ou commenté en dernier, mais j'ai trouvé que cela
.parseElement(inputElement)
fonctionne bien lorsque j'essaie d'ajouter des éléments créés dynamiquement à un formulaire qui a déjà un validateur chargé. Cela a déjà été suggéré par @jamesfm (15 février 11) dans l'un des commentaires ci-dessus, mais je l'ai négligé les premières fois où je travaillais là-dessus. Je l'ajoute donc en tant que réponse distincte pour la rendre plus évidente et parce que je pense que c'est une bonne solution et ne nécessite pas autant de frais généraux. Ce n'est peut-être pas pertinent pour toutes les questions soulevées dans les réponses ultérieures, mais je pense que ce serait une solution à la question initiale. Voici comment j'ai fait fonctionner le mien:la source
Tout d'abord, je pense que l'appel devrait être à .validator, pas valider, alors vous devez passer l'identifiant du formulaire
la source
Si vous avez besoin d'ajouter et de supprimer des éléments avec la possibilité que certaines erreurs soient déjà affichées, c'est ce que j'ai fourni. Il est basé principalement sur différentes idées sur cette page de questions. J'utilise le intégré au
destroy()
lieu de simplement supprimer l'attribut data pour JQuery validate.Vous l'appelez avant de modifier dynamiquement les entrées du formulaire. Vous réinitialisez ensuite la validation après.
Remarque: Si certaines ou toutes les entrées ont été validées et comportent des erreurs, ces erreurs seront réinitialisées ... mais elles reviendront correctement lors de la prochaine validation.
la source