#jquery #asp.net-mvc-3 #jquery-validate
#jquery #asp.net-mvc-3 #jquery-проверка
Вопрос:
ОБНОВЛЕНИЕ: я создал новый проект MVC 3 с Razor HTML 5, затем я обновил проект с помощью NuGet в jQuery 1.6, и плагин проверки больше не работает, он каждый раз отправляет сообщение обратно и возвращает сообщение об ошибке с сервера. Я думаю, что плагин проверки неисправен в jQuery 1.6
У меня есть приложение MVC 3, которое использует диалоговое окно пользовательского интерфейса Jquery (загруженное из частичного представления, содержащего форму) для отправки информации через ajax на сервер. Я хочу запустить проверку моей формы на стороне клиента, прежде чем делать публикацию ajax. В Firefox и IE9 работает нормально, в IE7 и IE8 form.validate() всегда возвращает true.
Вот js-код, прикрепленный к моей кнопке отправки:
var wizard = $("#wizard"); //div that holds the modal dialog
var myform = $("#wizard form");
var submitFunction = function (e) {
e.preventDefault(); //no postback
myform.validate();
if (myform.valid()) {
$(this).attr("disabled", "disabled");
submited = true;
$.post(
"SuperAdmin/CreateEditController",
$(this).serialize(),
function (data) {
if (data.Success) {
wizard.dialog('destroy');
}
else {
wizard.html(data.Html);
}
},
"json"
); //end json post
}
};
myform.submit(submitFunction);
Я использую следующее, включая:
<script src="@Url.Content("~/Scripts/jquery-1.6.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
Плагин проверки jQuery был обновлен с помощью NuGet версии 1.8.0 и библиотеки jQuery до версии 1.6.
Обновление: я протестировал код, сгенерированный с использованием шаблона scaffolding по умолчанию, и он выполняет то же самое, без проверки на стороне клиента. Возможно, jQuery 1.6 несовместим с шаблоном Razor scaffolding??
Комментарии:
1. Пожалуйста, разместите также свой HTML-код из вашей формы.
2. Если это код для функции validate, то где
e
определена функция? Пожалуйста, опубликуйте полный код, поскольку ожидается, что проблема заключается в простой опечатке, с которой ie плохо справляется.3.
src="@Url.Content("~/Scripts/jquery-1.6.min.js")"
мне кажется странным — это новая функция mvc3?4. @Hogan jQuery выпустил обновленную и улучшенную версию, смотрите здесь stefanprodan.eu/2011/05/updat-mvc-projects-to-jquery-1-6
Ответ №1:
Jquery Validate в настоящее время не работает с jQuery 1.6 в IE6, IE7 и IE8.
Комментарии:
1. Я рвал на себе волосы из-за этого. Получение последней версии jquery.validate устранило проблему.
Ответ №2:
У меня были проблемы с jquery.validate.js в IE7 / IE8. После отладки я заметил, что проблема была вызвана следующей строкой (ln 436 в версии 1.7):
return $([]).add(this.currentForm.elements)
.filter(":input")
Замените эти две строки чем-то вроде:
return $(':input', this.currentForm)
Это помогло мне.
Ответ №3:
Попробуйте переключиться на не уменьшенную версию:
Сокращенная версия jQuery 1.6, похоже, некорректно работает в режимах совместимости с IE7, IE8 и IE9. Переключение на не-miinified сработало для меня.
http://bugs.jquery.com/ticket/9365
Удачи!
Комментарии:
1. Не уменьшенная версия решает проблему для меня в процессе разработки. Это не очень хорошее решение для производства. Кстати, я вижу проблему с IE9
Ответ №4:
Вместо того, чтобы делать это:
if (myform.valid())
сделайте это:
if (myform.validate().form())
Надеюсь, это поможет. Приветствую
Ответ №5:
Есть некоторые ошибки в attr () в IE7, 8, которые, надеюсь, будут исправлены в следующем выпуске.
Возможно, команда jQuery поступила правильно, изменив attr (), но изменения действительно портят работу всех.
И это определенно средство остановки показа для обновления.
Ответ №6:
У меня это тоже не работает в IE9. Откат к jQuery-1.5.1 устранил проблему для меня. Вы можете запустить команду менеджера пакетов NuGet «Install-Package jQuery -version 1.5.1» для отката.
Ответ №7:
У меня была похожая ситуация, когда каждая проверка была истинной в IE8, когда я использовал jQuery 1.6.2, Jquery.Подтвердите 1.8 и Jquery.Подтвердите.Ненавязчивый; но он работает в FireFox
В настоящее время я создаю веб-сайт, на котором люди могут входить в систему с любой страницы. Мой дизайн заключается в том, что родительская страница использует jQuery.Загрузить (url), чтобы загрузить мою дочернюю страницу (логин) в диалоговое окно jQuery. Моя родительская страница не содержит диалогового окна jQuery; дочерняя страница (login) содержит диалоговое окно. Поскольку дочерняя страница является неполной страницей, она не включала весь HTML-код котла
Пример html, отсутствующего на моей дочерней странице:
<html>
<title></title>
<body>
</body>
</html>
Я пришел, чтобы выяснить, протестировав дочернюю страницу (login) независимо от родительской страницы, что IE имеет проблемы с диалогом jQuery и проверкой jQuery, когда отсутствует элемент body.
Я создал пример jsFiddle (см. Ссылку ниже). Если вы протестируете этот пример в IE 8, проверка не сработает, но если вы протестируете его в FireFox, проверка действительно сработает. В примере jsFiddle я включил элемент body, но в IE8 все еще есть проблемы. Когда я просматриваю исходный код jsFiddler, я не могу найти никаких элементов body и считаю, что это усугубляет проблему в jsFiddler. Если я запускаю код на своем компьютере и элемент body включен, обе версии IE8 и Firefox работают. Если я удалю элемент body, IE8 не будет работать, а FireFox будет работать.
Ответ №8:
Не лучшее решение, однако добавление следующего мета-тега в раздел заголовка страницы помогло бы отключить режим совместимости:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
Ответ №9:
Убедитесь, что ваш плагин jQuery-Validate также обновлен. Вы должны использовать версию 1.8.0.1 для jQuery-Validate. Имя пакета NuGet — jQuery.Проверка.
Комментарии:
1. Я применил последнее обновление от NuGet, но единственное различие между ними заключается в типе лицензии, версия внутри файла по-прежнему 1.8.0
2. @Stefan — Можете ли вы попробовать удалить jQuery и jQuery-Validate, затем убедиться, что фактические файлы удалены из вашей системы, а затем переустановить два пакета?
Ответ №10:
У меня была такая же проблема при использовании 1.6.
Обновил jquery.validate до последней версии, и это не имело никакого значения.
Обновлен jquery до 1.7, и это исправлено.
Ответ №11:
Я перепробовал множество ответов здесь, но безуспешно. В конце концов, я обнаружил, что мне нужно обновить jquery.validate
библиотеку до версии 1.9. Я знаю, что искал это ранее, но не смог найти, поэтому тогда я написал этот небольшой пост в блоге о том, как найти последнюю версию и устранить эту проблему: