jQuery 1.6 $ (‘form’).validate() не работает в IE7 и IE8

#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.

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

Комментарии:

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 будет работать.

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

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

Проверка Jquery не выполняется в ie7 и ie 8