15

我有以下内容:

<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。

4

5 回答 5

24

看起来这是 IE10 在兼容模式下的一个错误,因为据报道它在 IE7 中工作。但是这里发布了一些 jquery 解决方法:http: //bugs.jquery.com/ticket/12577

于 2012-12-09T00:20:30.293 回答
6

我发现导致问题的是 jquery.validate.js 的第 35 行

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

注释掉这一行,问题就解决了。您也可以用 ( current browser <= 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');
    }
于 2013-03-11T08:16:01.120 回答
2

来自 jQuery 验证的你好问题

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

将 jquery Validation 插件的第 33 行更改为:

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

this.prop( "novalidate", "novalidate" );
于 2014-02-28T05:28:05.030 回答
1

我打算对 Xaris 的答案添加评论,但想在完整答案中提供一些额外的信息。我将 jQuery.validate.js 中的行更改为:

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

但是,$.browser 在 1.9 版中从 jQuery 中删除,所以我不得不添加 jQuery Migrate 插件(这是一个官方的 jQuery 插件)。

如果您在 .NET 中使用 nuget 包并使用捆绑功能,请记住您可以手动更新 jQuery.validate.js,但 jQuery.validate.min.js 中仍然存在问题。我不得不删除缩小版本,以便捆绑不会在生产中使用它。编辑 nuget 提供的文件是一种不好的做法,因为我的更改将在更新包时被覆盖,但这是目前解决此问题的最佳方法。

于 2013-04-24T20:45:16.323 回答
1

我的类似问题

SCRIPT3: Member not found由于定义了 X-UA-Compatible,我在 IE11 中遇到了同样的问题:

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

我的解决方案

就我而言,这些天来,应用程序要求是 IE8+。

因此,要解决此问题,只需删除元标记或将其更改为:

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

OP案例的解决方案(或任何类似问题)

根据兼容性要求,它可能会使用我使用的相同解决方案。

于 2013-11-26T18:36:14.560 回答