Comment désactiver le bouton d’envoi d’un formulaire en cas d’erreur de validation DataAnnotation?

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!"); });