J’ai tenté de vous lier à l’événement change de toutes les entrées du formulaire et de vérifier s’il existe des messages de validation sur la page. Le problème est que la validation semble se produire après l’événement de modification. Je vérifie donc avant que les erreurs n’apparaissent sur la page. Je cherche un moyen d’exécuter mon script après la validation côté client.
J’utilise MVC 2 avec les atsortingbuts DataAnnotation sur ma machine virtuelle.
Voici quelque chose que je viens de pirater ensemble qui enveloppe les fonctions parseElement
et invalidHandler
originales, vous permettant d’append votre propre logique.
(function($) { $.validator.unobtrusive.parseElement = (function (original) { return function (element, skipAttach) { original.call(this, element, skipAttach); var form = $(element).parents("form:first")[0]; var validationInfo = $(form).data('unobtrusiveValidation'); if (validationInfo) { var handler = validationInfo.options.invalidHandler; var newhandler = function () { console.log('Here is where you can do additional handling'); handler.call(this); }; validationInfo.options.invalidHandler = $.proxy(newhandler, form); } else { // this didn't work. } } })($.validator.unobtrusive.parseElement); })(jQuery);
Notez cependant qu’il s’agit d’une fonction immédiate et non de la fonction jQuery qui équivaut à document.onload.
Cela remplace le $.validator.unobtrusive.parseElement
par une nouvelle fonction qui appelle l’original pour s’assurer que validationInfo.options.invalidHandler
est appliqué au formulaire parent, ce qui vous permet ensuite d’envelopper ce gestionnaire avec la fonction newhandler
.
Edit: La réponse ci-dessus ne fonctionnera que pour MVC3 et la validation discrète.
Pour effectuer des fonctionnalités supplémentaires avec $.validator
lorsque le formulaire est invalide …
$('form:first').bind("invalid-form.validate", function () { alert("invalid!"); });