【问题标题】:jQuery Validation plugin, IE7 "SCRIPT3: Member not found"jQuery 验证插件,IE7 “SCRIPT3: Member not found”
【发布时间】:2012-11-07 21:25:10
【问题描述】:

我有以下几点:

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

【问题讨论】:

  • @JayBlanchard 我看到了那个,但是即使只是一个常规的 .validate() 函数也会失败。删除 validate() 调用会停止错误。阅读实际的插件支持,并没有一个很好的答案。开发人员说他“没有看到错误”并不断关闭与之相关的错误报告。我希望也许有人遇到了比那个特定帖子更好的修复方法。
  • 我也遇到了同样的问题 - 仅在 IE7 中
  • @Truegilly 是兼容模式下的“真正的”IE7 还是 IE8-10?

标签: javascript jquery jquery-validate internet-explorer-7 compatibility-mode


【解决方案1】:

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

【讨论】:

  • 感谢您的发现。我想是时候弄个带有 IE7 的虚拟机了!
  • 您可以在此处modern.ie 找到来自微软的许可/免费虚拟机,其中包括 Vista 上的 IE7。缺点是其中一些需要每 90 天更新一次,但总比在无法使用 真正的 IE7 副本测试的情况下遇到此类问题要好。
  • www.browserstack.com 可用于测试旧版浏览器
  • 它可能相关也可能不相关,但在工作中,在从同一图像创建的多台计算机上使用 IE10 时,一些同事会看到“SCRIPT3:未找到成员”。错误而其他没有....唯一的区别似乎是IE10安全修复程序已安装在没有发生错误的机器上...安全修复程序是KB2888505 support.microsoft.com/kb/2888505/en-us ...我希望帮助
  • 部分jQuery论坛用户反映IE7中没有出现该问题,仅在IE7模式下运行的IE10中出现。
【解决方案2】:

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

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

注释掉这一行,问题就解决了。您也可以用 (current browser

更新 要仅注释掉 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');
    }

【讨论】:

    【解决方案3】:

    来自 jQuery 验证的你好问题

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

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

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

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

    【讨论】:

    • 也在这里醒来! 3rd 方插件使用.attr()。谢谢!
    【解决方案4】:

    我打算对 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 提供的文件是不好的做法,因为我的更改将在更新包时被覆盖,但这是目前解决此问题的最佳方法。

    【讨论】:

    • jQuery.browser 在 1.9 中已被 jQuery.support 取代,请参阅:api.jquery.com/jQuery.support 但是 jQuery 建议使用 modernizr.com,因为 .support api 仅供内部使用。但我看不出使用它有什么问题。
    【解决方案5】:

    我的类似问题

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

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

    我的解决方案

    在我的情况下,这些天,应用程序要求是 IE8+。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-13
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      相关资源
      最近更新 更多