Error in jquery.validate.js in MVC 4 Project with jQuery 1.9

61

I created a new ASP.Net MVC 4 project using the template in Visual Studio 2012. After upgrading to jQuery 1.9, the login functionality breaks. Specifically, I get the error

0x800a138f - JavaScript runtime error: Unable to get property 'call' of undefined or null reference

at line 1172, column 5 in jquery.validate.js

How can I fix this issue?

jquery
jquery-validate
unobtrusive-validation
asked on Stack Overflow Feb 2, 2013 by Eric J. • edited Feb 2, 2013 by Sparky

7 Answers

84

This issue is fixed in jQuery Validation Plugin 1.11.0pre.

Unfortunately there is currently no pre-release build on NuGet, so it is currently necessary to download jquery.validation.js directly from GitHub:

jQuery.Validation 1.11 is now available via NuGet (thanks @Simon_Weaver).

UPDATE

It looks like general support for jQuery 1.9 is in the jQuery.Validation code base but not yet released

https://github.com/jzaefferer/jquery-validation/pull/613

answered on Stack Overflow Feb 2, 2013 by Eric J. • edited Oct 8, 2013 by Andre Lombaard
37

If you install jQuery.Migrate 1.1.1 then it will work fine with jQuery.Validation 1.11, jQuery 1.9 and 2.x.

As well as doing install-package jQuery.Migrate, you must then add the JavaScript to BundleConfig.cs - I added it just after jQuery and this is what the line that registers jQuery looks like now:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
  "~/Scripts/jquery-{version}.js",           // jQuery itself
  "~/Scripts/jquery-migrate-{version}.js")); // jQuery migrate
answered on Stack Overflow Aug 6, 2013 by Richard • edited Aug 16, 2013 by Richard
10

The issue is the line of code inside of the validation script

$.event.handle.call(this,e);

The problem here is with $.event.handle. Both this and e have proper values. jQuery deprecated $.event.handle in favor of jQuery.event.dispatch according to the migration script http://code.jquery.com/jquery-migrate-1.2.0.js.

Fixing these errors is as easy as simply replacing the reference to handle with dispatch.

This can be wrapped in a document.ready callback to ensure it runs after the other scripts run.

$(function(){
    jQuery.event.handle = jQuery.event.dispatch
});
answered on Stack Overflow Jul 9, 2015 by Travis J
8

I had the same issue, no problem in firefox but ie still gives the error. I am using jquery-2.0.0; jQuery Validation Plugin 1.11.1

I found a fix: replace

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

with

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
answered on Stack Overflow May 20, 2013 by Texellab
2

Replacing the bundles script path by the following line worked for me.

 <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>

I tried updating the jquery validation via Nuget, and also updated the jquery to 2.0 version, but none of those solution worked. The only one that worked fine without downloading anything Pre version was the solution proposed by Texellab

answered on Stack Overflow Sep 9, 2013 by Javier
0

The underlying problem is that some methods that had been deprecated since jQuery 1.7 (when new, improved methods were added) have been removed in 1.9. jQuery Validate has, apparently, not been updated so it uses the new methods instead. I found that using the jQuery Migrate Plugin, which puts the removed methods back in, solved my problems with this.

answered on Stack Overflow May 31, 2013 by Vance
0

Here's another solution:

I used MVC 3 with jQuery 1.71 and jQuery UI 1.8.20. I used the jQuery UI Tabs widget and setup each tabbed area to load a partial page that contained input fields.

Works great in Firefox v22 and Chrome v28, fails in IE10. The error I got was 'Unable to get property 'settings' of undefined or null reference'

The resolution was to go to the partial forms and comment out the following code:

<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>*

It now works successfully in all browsers.

answered on Stack Overflow Jul 19, 2013 by Derek Davidson PST

User contributions licensed under CC BY-SA 3.0