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

时间:2012-11-19 21:29:41

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

我有以下内容:

<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 w /兼容性)在控制台中报告以下错误:

  

SCRIPT3:找不到会员。

     

jquery.js,第2525行第4期

当然IE8及以上版本工作正常,但我的客户端正在使用IE7。

5 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:6)

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

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

注释掉这一行并解决了问题。你也可以用一个(当前的浏览器&lt; = ie7)来包装它,只有当ie7是broswer时,才能明确地避免这一行。

<强>更新 要仅针对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 :(得分:2)

来自jQuery验证的Hello问题

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

更改jquery Validation插件的第33行:

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

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

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

答案 4 :(得分:1)

我的类似问题

由于定义的X-UA兼容,我在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案例(或任何类似问题)的解决方案

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