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

我有以下内容:

    
Select option... 2013-2014 2012-2013 2011-2012 2010-2011
$(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" } } }); });

每个人最喜欢的浏览器,IE7(IE10 w /兼容性)在控制台中报告以下错误:

SCRIPT3:找不到会员。

jquery.js,第2525行,第4行

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

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

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

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

注释掉这一行并解决了问题。 您也可以使用(当前浏览器<= ie7)来包装它,以便仅当ie7是broswer时才明确地避免使用此行。

更新要仅为ie7注释掉行,您可以使用以下代码:

 var ie = (function () { var undef, v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i'); while ( div.innerHTML = '', all[0] ); return v > 4 ? v : undef; } ()); 

然后:

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

来自jQueryvalidation的问题

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

更改jquery Validation插件的第33行:

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

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

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

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

但是,$ .browser在1.9版本中从jQuery中删除了,所以我不得不添加jQuery Migrate插件(这是一个官方的jQuery插件)。

如果您在.NET中使用nuget包并使用捆绑function,请记住您可以手动更新jQuery.validate.js,但问题仍然存在于jQuery.validate.min.js中。 我不得不删除缩小版本,以便捆绑不会在生产中取出它。 编辑nuget提供的文件是不好的做法,因为我的更改将在更新软件包时被覆盖,但这是此问题的最佳解决方案。

我的类似问题

我有相同的SCRIPT3: Member not found由于定义的X-UA兼容,IE11中的SCRIPT3: Member not found问题:

  

我的解决方案

就我而言,在这些日子里,应用程序的要求是IE8 +。

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

  

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

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

Interesting Posts