Ошибка в 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>*
Теперь он работает успешно во всех браузерах.