jQuery Validation plugin, IE7 “SCRIPT3: Member not found”

扶醉桌前 提交于 2019-11-30 12:04:31

问题


I have the following:

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

Everyone's favorite browser, IE7 (IE10 w/compatibility really) is reporting the following error in the console:

SCRIPT3: Member not found.

jquery.js, line 2525 character 4

Of course IE8 and above work fine, but my client is using IE7.


回答1:


Looks like it's a bug with IE10 in compatibility mode as it is reported to work in IE7. But there are some jquery workarounds posted here: http://bugs.jquery.com/ticket/12577




回答2:


What I found causing the problem is line 35 of jquery.validate.js

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

Comment out this line and problem is sovled. You could also wrap it with a ( current browser <= ie7) to explictly avoid this line only when ie7 is the broswer.

Update To comment out line only for ie7 you can use the following code:

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;
    } ());

and then:

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



回答3:


Hello problem from jQuery validation

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

Change line 33 of the jquery Validation plugin from:

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

to

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



回答4:


I was going to add a comment to the answer from Xaris, but wanted to give a little extra info in a full answer. I changed the line in jQuery.validate.js to:

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

However, $.browser was removed from jQuery in version 1.9, so I had to add the jQuery Migrate plugin (this is an official jQuery plugin).

If you are using nuget packages in .NET and you use the bundling feature, then keep in mind that you can manually update jQuery.validate.js, but the problem will still exist in jQuery.validate.min.js. I had to delete the minified version so that the bundling wouldn't pick it up in production. It's bad practice to be editing the nuget supplied files as my changes will be overwritten when the package is updated, but this is the best fix for this issue right now.




回答5:


My similar problem

I had the same SCRIPT3: Member not found issue in IE11 due to the defined X-UA-Compatible:

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

My solution

In my case, in these days, the application requirements are IE8+.

So, to fix the problem, just remove the meta tag or change it to:

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

Solution to OP's case (or any similar issue)

Depending on the compatibility requirements, it may be used the same solution that I used.



来源:https://stackoverflow.com/questions/13462569/jquery-validation-plugin-ie7-script3-member-not-found

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!