Question

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.

Was it helpful?

Solution

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

OTHER TIPS

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

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" );

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.

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top