jQuery验证插件,IE7“SCRIPT3:成员未找到”

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。


https://dev59.com/O2sz5IYBdhLWcg3wTl4T - Jay Blanchard
@JayBlanchard,我看到了那个帖子,但即使是普通的.validate()函数也会失败。移除validate()调用可以解决错误。阅读插件实际支持文档,没有一个好的答案。开发者表示他“看不到错误”,并不断关闭与此相关的bug报告。我希望有人能找到比那篇帖子更好的解决方法。 - Joel Kinzel
我也遇到了同样的问题 - 只在IE7中。 - JGilmartin
@Truegilly 这是一个“真正的”IE7还是IE8-10兼容模式? - Joel Kinzel
5个回答

24

谢谢你找到了那个。我想现在是时候在虚拟机上安装IE7了! - Joel Kinzel
1
你可以在这里找到微软的许可/类免费虚拟机:http://modern.ie,其中包括Vista上的IE7。缺点是有些虚拟机需要每90天更新一次,但它们比没有能够使用*真正*的IE7测试而遇到问题要好得多。 - totallyNotLizards
2
www.browserstack.com 对于测试旧版浏览器非常有用。 - Tom
1
可能与此有关,但在工作中,使用从同一映像创建的多台计算机上的IE10时,一些同事会看到“SCRIPT3:未找到成员”错误,而其他人则不会...唯一的区别似乎是在没有发生错误的机器上安装了IE10安全修复程序KB2888505 http://support.microsoft.com/kb/2888505/en-us...希望这可以帮助。 - tsimbalar
jQuery论坛上的一些用户报告称,该问题在IE7中不会发生,但只会在以IE7模式运行的IE10中出现。 - Eric J.
如果您不需要支持IE7,您可以通过使用例如<meta http-equiv="x-ua-compatible" content="IE=9" >指示浏览器使用更新的文档模式。请参见https://dev59.com/1mYq5IYBdhLWcg3wkRUo - Eric J.

6
我发现问题的原因是jquery.validate.js的第35行。
this.attr('novalidate', 'novalidate');

将此行注释掉,问题就解决了。您也可以使用<!--[if lte IE 7]>...<![endif]-->将其包裹起来,以明确地避免仅在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');
    }

2

我也在这里工作过!第三方插件使用了.attr()。谢谢! - junkystu

1

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

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

然而,$.browser在jQuery 1.9版本中被移除,因此我不得不添加jQuery Migrate插件(这是一个官方的jQuery插件)。
如果您在.NET中使用nuget包并使用捆绑功能,则请注意,您可以手动更新jQuery.validate.js,但问题仍将存在于jQuery.validate.min.js中。我不得不删除缩小版本,以便捆绑在生产中不会选择它。编辑nuget提供的文件是不好的做法,因为当包更新时我的更改将被覆盖,但这是目前解决此问题的最佳方法。

jQuery.browser已在1.9中被替换为jQuery.support,请参见:http://api.jquery.com/jQuery.support/然而,jQuery建议使用http://modernizr.com/,因为.support API仅供内部使用。但我认为使用它没有问题。 - Tricky

1

我的类似问题

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

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

我的解决方案

在我的情况下,应用要求是IE8+。

因此,为了解决问题,只需删除meta标签或将其更改为:

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接