Плагин jQuery Validation, IE7 "SCRIPT3: Member not found"

У меня есть следующее:

<html>
    <head>
    </head>
    <body>
        <div>
            <form method="post">
                <div id="questions">    
                    <label for="question-6">Name of Course:</label>
                    <input type="text" name="name_of_course[response]" value="" id="question-6" class="required">
                    <label class="control-label" for="reporting-year">Reporting Year: </label>
                    <select name="reporting_year" id="reporting-year">
                        <option value="-1" selected="selected">Select option...</option>
                        <option value="4">2013-2014</option>
                        <option value="1">2012-2013</option>
                        <option value="2">2011-2012</option>
                        <option value="3">2010-2011</option>
                    </select>
                </div>
                <input type="submit" name="submit" value="Save Entry" class="btn">
            </form>
        </div>
        <script src="//code.jquery.com/jquery.js"></script>
        <script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.10.0/jquery.validate.min.js"></script>
        <script>
            $(function(){
                jQuery.validator.addMethod("notEqual", function(value, element, param) {
                        return this.optional(element) || value !== param;
                        }, "Please select an option");
                $('form').validate({
                    rules:{
                        'reporting_year': {
                            notEqual: "-1"
                        }
                    }
                });
            });
        </script>
    </body>
</html>

Всем любимым браузером IE7 (IE10 с совместимостью) сообщается о следующей ошибке в консоли:

SCRIPT3: Пользователь не найден.

jquery.js, строка 2525 символов 4

Конечно, IE8 и выше работают нормально, но мой клиент использует IE7.

Ответы

Ответ 1

Похоже, что это ошибка с IE10 в режиме совместимости, поскольку, как сообщается, она работает в IE7. Но есть несколько обходных способов jquery, размещенных здесь: http://bugs.jquery.com/ticket/12577

Ответ 2

То, что я обнаружил, вызывает проблему в строке 35 jquery.validate.js

this.attr('novalidate', 'novalidate');

Прокомментируйте эту строку, и проблема решена. Вы также можете обернуть его (текущий браузер <= ie7), чтобы явно избегать этой строки, только когда ie7 является броузером.

Обновление Чтобы прокомментировать строку только для ie7, вы можете использовать следующий код:

var ie = (function () {
        var undef,
    v = 3,
    div = document.createElement('div'),
    all = div.getElementsByTagName('i');
        while (
    div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
    all[0]
);
        return v > 4 ? v : undef;
    } ());

а затем:

    if (!ie || ie > 7) {
      this.attr('novalidate', 'novalidate');
    }

Ответ 4

Я собирался добавить комментарий к Xaris, но хотел дать немного дополнительной информации в полном ответе. Я изменил строку в jQuery.validate.js на:

if (!$.browser.msie || $.browser.version > 7) {
    this.attr("novalidate", "novalidate");
}

Однако, $.browser был удален из jQuery в версии 1.9, поэтому мне пришлось добавить плагин jQuery Migrate (это официальный плагин jQuery).

Если вы используете пакеты nuget в .NET и используете функцию связывания, имейте в виду, что вы можете вручную обновить jQuery.validate.js, но проблема все равно будет существовать в jQuery.validate.min.js. Мне пришлось удалить минитипированную версию, чтобы связать ее не удалось. Плохая практика заключается в редактировании файлов, поставляемых в nuget, поскольку мои изменения будут перезаписаны при обновлении пакета, но это лучшее исправление для этой проблемы прямо сейчас.

Ответ 5

Моя аналогичная проблема

У меня была такая же проблема SCRIPT3: Member not found в IE11 из-за определенного X-UA-Compatible:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

Мое решение

В моем случае в эти дни требования к приложениям - IE8 +.

Итак, чтобы устранить проблему, просто удалите метатег или измените его на:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />

Решение для случая OP (или любой аналогичной проблемы)

В зависимости от требований совместимости может использоваться то же самое решение, которое я использовал.