Daniel Hoelbling-Inzko talks about programming
I was banging my head against the wall for more than three hours, reading jQuery.validate's code, trying to figure out why my supplied errorPlacement
or highlight
callbacks where not called.
The code in question looked perfectly fine and came pretty much straight out of the docs:
$('form').validate({ debug: true, errorPlacement: function () { console.log("errorPlacement", this, arguments); }, highlight: function () { console.log("highlight", this, arguments); }, success: function () { console.log("success", this, arguments); } });
As you can see I was still stuck in the "let's see what we can do from these callbacks" phase of implementing my own automatic validation scheme for a project. Guess what the above did? Nothing! And I mean really nothing. The validation worked as expected with my validation classes, but none of my callbacks got ever called (meanwhile supplied arguments like messages etc worked like a charm).
After 3 hours I finally came onto something when I couldn't find the validation classnames that where put on my elements inside the jQuery.validation code I was looking at. Turns out: Microsoft's jquery.validation.unobtrusive.js cripples jQuery.validation so that most of it's configuration options simply don't work any more. Neither with the $.validate.setDefaults() nor with the $('#element').validate() methods.
Needless to say that I almost broke into tears when my stuff was working fine once I removed the unobtrusive script from the page.
I do like the unobtrusive stuff - it serves it's purpose inside the MS MVC niche. But in this case I was not using unobtrusive on that form at all! So I simply did not expect the library to mess with jQuery.validate in any way as there was no unobtrusive validation stuff going on.