JQuery 1.6 $('form'). Validate() не работает в IE7 и IE8
ОБНОВЛЕНИЕ: я создал новый проект MVC 3 с Razor HTML 5, затем я обновил проект с NuGet на JQuery 1.6, и плагин проверки больше не работает, он каждый раз отправляет сообщение и возвращает ошибку сообщение с сервера. Я думаю, что плагин проверки не работает с JQuery 1.6
У меня есть приложение MVC 3, которое использует диалоговое окно Jquery UI (загружается из частичного представления, которое содержит форму) для передачи информации через 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 Validation был обновлен с помощью NuGet версии 1.8.0 и библиотеки JQuery до 1.6.
Обновление: я протестировал код, сгенерированный с помощью шаблона по умолчанию для скаффолдинга, и он делает то же самое, без проверки на стороне клиента. Может быть, JQuery 1.6 не совместим с шаблоном Razor?
11 ответов
Jquery Validate в настоящее время не работает с jQuery 1.6 в IE6, IE7 и IE8.
У меня были проблемы с jquery.validate.js в IE7/IE8. После отладки я заметил, что следующая строка вызывает проблему (ln 436 в версии 1.7):
return $([]).add(this.currentForm.elements)
.filter(":input")
Замените эти две строки чем-то вроде:
return $(':input', this.currentForm)
Это помогло мне.
Попробуйте перейти на неунифицированную версию:
Сокращенная версия jQuery 1.6, похоже, не работает правильно в IE7, режиме совместимости IE8 и режиме совместимости IE9. Переход на non-miinified работал для меня.
http://bugs.jquery.com/ticket/9365
Удачи!
У меня была похожая ситуация, когда каждая проверка истинна в IE8, когда я использовал JQuery 1.6.2, Jquery.Validate 1.8 и Jquery.Validate.Unobtrusive; но это работает в FireFox
В настоящее время я создаю сайт, где люди могут войти с любой страницы. Мой дизайн таков, что родительская страница использует JQuery.Load(url) для загрузки моей дочерней страницы (логин) в диалог JQuery. Моя родительская страница не содержит диалог JQuery; дочерняя страница (логин) содержит диалог. Так как дочерняя страница является частичной страницей, она не включает в себя весь HTML-код
Пример HTML отсутствует на моей дочерней странице:
<html>
<title></title>
<body>
</body>
</html>
Я пришел к независимому тестированию дочерней страницы (входа в систему) с родительской страницы, чтобы выяснить, что в IE возникают проблемы с JQuery Dialog и JQuery Validation, когда нет элемента body.
Я создал пример jsFiddle (см. Ссылку ниже). Если вы проверяете этот пример в IE 8, проверка не работает, но если вы проверяете его в FireFox, проверка работает. В примере jsFiddle я включил элемент body, но IE8 все еще имеет проблемы. Когда я просматриваю источник jsFiddler, я не могу найти какие-либо элементы тела и считаю, что это усугубляет проблему в jsFiddler. Если я запускаю код на своем компьютере и включаю элемент body, то обе версии IE8 и Firefox работают. Если я удаляю элемент body, IE8 не работает, а FireFox работает.
Это не работает на IE9 для меня тоже. Откат к jQuery-1.5.1 устранил проблему для меня. Вы можете запустить команду менеджера пакетов NuGet "Install-Package jQuery -version 1.5.1", чтобы выполнить откат.
Вместо этого:
if (myform.valid())
сделай это:
if (myform.validate().form())
Надеюсь это поможет. ура
Однако не лучшее решение, добавление следующего метатега в раздел заголовка страницы поможет отключить режим совместимости:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
Есть некоторые ошибки, связанные с attr() в IE7,8, надеюсь, они будут исправлены в следующем выпуске.
Может быть, команда jQuery правильно сделала, изменив attr(), но эти изменения действительно разрушают работу каждого.
И это определенно шоу-стопер для обновления.
Убедитесь, что ваш плагин jQuery-Validate также обновлен. Вы должны использовать версию 1.8.0.1 для проверки jQuery. Имя пакета NuGet - jQuery.Validation.
У меня была такая же проблема с использованием 1.6.
Обновленный jquery.validate до последнего, и это не имело никакого значения.
Обновлен jquery до 1.7, и это исправлено.
Я попробовал много ответов здесь безуспешно. В конце концов я обнаружил, что мне нужно обновить jquery.validate
библиотека до версии 1.9. Я знаю, что искал это ранее, но не смог найти его, поэтому я написал небольшой пост в блоге о том, как найти последнюю версию и исправить эту проблему: