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.

https://github.com/jzaefferer/jquery-validation/issues/105

У меня были проблемы с 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 работает.

http://jsfiddle.net/BarDev/aRj64/

Это не работает на 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. Я знаю, что искал это ранее, но не смог найти его, поэтому я написал небольшой пост в блоге о том, как найти последнюю версию и исправить эту проблему:

Проверка Jquery не работает в ie7 и ie 8

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