Ошибка в 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, но еще не выпущена.
Если вы установите 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, который возвращает удаленные методы, решает мои проблемы с этим.