系统从jq 1.4.2升级到1.7.1时发现,jquery.validate.js 在IE下无法正常工作,单步调试进去和FF对比发现这段代码返回的结果不一致:
return $([]).add(this.currentForm.elements)
.filter(":input")
.not(":submit, :reset, :image, [disabled]")
.not(this.settings.ignore)
.filter(function () {
!this.name && validator.settings.debug && window.console && console.error("%o has no name assigned", this);
// select only the first element for each name, and only those with rules specified
if (this.name in rulesCache || !validator.objectLength($(this).rules()))
return false;
rulesCache[this.name] = true;
return true;
});
IE 8 下数组对象长度为0,而FF和chrome为8,折腾许久才发现是$([]).add()方法的问题,改成
$($.makeArray(this.currentForm.elements))...
IE和FF下就同时可用了。莫非这个是jQuery 1.7.1在IE下的不兼容bug?