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

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

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

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

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

7 ответов

Решение

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

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

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

ОБНОВИТЬ

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

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

Если вы установите 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

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

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

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

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

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

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

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

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

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

с

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

Замена пути сценария связок следующей строкой работала для меня.

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

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

Вот еще одно решение:

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

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

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

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

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

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

Другие вопросы по тегам