Ошибка в jquery.validate.js в проекте MVC 4 с jQuery 1.9

Я создал новый проект ASP.Net MVC 4 с использованием шаблона в Visual Studio 2012. После обновления до jQuery 1.9 функция входа в систему ломается. В частности, я получаю ошибку

0x800a138f - Ошибка выполнения JavaScript: невозможно получить вызов свойства undefined или нулевую ссылку

в строке 1172, столбец 5 в jquery.validate.js

Как я могу исправить эту проблему?

Ответ 1

Эта проблема исправлена ​​в плагине проверки jQuery 1.11.0pre.

К сожалению, в настоящее время на NuGet нет предварительной версии, поэтому в настоящее время необходимо загрузить jquery.validation.js прямо из GitHub:

jQuery.Validation 1.11 теперь доступен через NuGet (спасибо @Simon_Weaver).

UPDATE

Похоже, что общая поддержка jQuery 1.9 находится в базе jQuery.Validation, но еще не выпущена

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

Ответ 2

Если вы устанавливаете jQuery.Migrate 1.1.1, то он отлично работает с jQuery.Validation 1.11, jQuery 1.9 и 2.x.

Как и при выполнении install-package jQuery.Migrate, вы должны добавить JavaScript в BundleConfig.cs - я добавил его сразу после jQuery, и это то, что теперь выглядит строка, которая регистрирует jQuery:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
  "~/Scripts/jquery-{version}.js",           // jQuery itself
  "~/Scripts/jquery-migrate-{version}.js")); // jQuery migrate

Ответ 3

Проблема заключается в строке кода внутри проверки script

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

Проблема здесь в $.event.handle. И this, и e имеют правильные значения. jQuery устарел $.event.handle в пользу jQuery.event.dispatch в соответствии с миграцией script http://code.jquery.com/jquery-migrate-1.2.0.js.

Исправление этих ошибок так же просто, как просто замена ссылки на дескриптор с отправкой.

Это может быть завернуто в обратный вызов document.ready, чтобы гарантировать, что он запускается после запуска других скриптов.

$(function(){
    jQuery.event.handle = jQuery.event.dispatch
});

Ответ 4

У меня была такая же проблема, не проблема в firefox, но я все равно выдавал ошибку. Я использую jquery-2.0.0; Плагин JQuery Validation 1.11.1

Я нашел исправление: замените

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

с

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

Ответ 5

Замена пучков script с помощью следующей строки для меня.

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

Я попробовал обновить проверку jquery через Nuget, а также обновил версию jquery до версии 2.0, но ни одно из этих решений не работало. Единственный, который отлично работал, не загружая ничего. Предварительная версия была решением, предложенным Texellab

Ответ 6

Основная проблема заключается в том, что некоторые методы, которые устарели, поскольку jQuery 1.7 (когда новые, улучшенные методы были добавлены) были удалены в 1.9. jQuery Validate, по-видимому, не обновлялся, поэтому вместо этого использует новые методы. Я обнаружил, что использование плагина jQuery Migrate, который возвращает удаленные методы, решил мои проблемы с этим.

Ответ 7

Здесь другое решение:

Я использовал MVC 3 с jQuery 1.71 и jQuery UI 1.8.20. Я использовал виджет jQuery UI Tabs и настраивал каждую область с вкладками для загрузки частичной страницы, содержащей поля ввода.

Отлично работает в Firefox v22 и Chrome v28, не работает в IE10. Ошибка, которую я получил, - "Невозможно получить настройки свойств" undefined или нулевой ссылки

Решением было перейти к частичным формам и прокомментировать следующий код:

<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>*

Теперь он работает успешно во всех браузерах.