这似乎是很多人遇到的问题! Link to google search results
有很多答案,我已经研究了一些更合理的答案,并修复了页面上的任何javascript错误。在Chrome中,我没有发现任何错误,但在IE8中,我在第205行出现无效参数错误,并且缺少状态下拉。我不是一个JavaScript专家,不知道从哪里开始解决这个问题。特别是当涉及到浏览器细节时。
如果您在JS中查看缺少字段的第205行,其中包括:
if (this.regionSelectEl.options.add) {
this.regionSelectEl.options.add(option);
} else {
this.regionSelectEl.appendChild(option);
}
恰好是页面中缺少的region(state)select元素。 JS的链接: http://jsfiddle.net/bms85/LKdsq/1/
可能导致这种情况的原因是什么?
修改
我发现原因与现代化的最新版本冲突,我正在使用现代化的html5 polyfills。仍在尝试调试冲突。
答案 0 :(得分:3)
我也在使用Magento / Modernizr网站遇到了这个问题,Brendan Falkowlski's answer向我指出了一个解决方案。自从他的回答Modernizr has released 2.6.x将html5shiv更新为3.6,其中包括对特定问题的修复。因此,如果您遇到这种情况并使用2.6之前的现代化程序,更新到最新版本(使用其捆绑的html5shiv)可以解决问题。
答案 1 :(得分:1)
要与跨浏览器兼容,您应该
this.regionSelectEl.options[this.regionSelectEl.options.length] = new Option(option.text, option.value);
答案 2 :(得分:1)
Magento中的forms.js与IE中的Modernizr(当包含HTML5shiv时)冲突(可能更低 - 没有测试)。带有表单验证的页面将显示错误消息。
修复:
不要在Modernizr中加载HTML5shiv,而是单独下载html5shiv.js:https://github.com/aFarkas/html5shiv
使用此布局XML添加条件注释,该条件注释仅为shiv提供IE8及更低版本:
<action method="addItem"><type>skin_js</type><name>js/html5shiv.js</name><params/><if>lte IE 8</if></action>
然后,您可以构建自定义的Modernizr包并将其包含在内。由于所有浏览器都获得了Modernizr脚本,因此它具有减轻现代浏览器脚本的良好副作用。
注意:这会给IE8用户带来额外的负担,因为他们强迫他们下载额外的脚本,但这比让他们看到错误要好。
答案 3 :(得分:0)
事实证明,IE不喜欢options.add:
if (this.regionSelectEl.options.add) {
this.regionSelectEl.options.add(option);
} else {
this.regionSelectEl.appendChild(option);
}
我只是使用了appendClild。
if (this.regionSelectEl.options.length > 0 && option.value.length > 0 && option.text.length > 0 && this.regionSelectEl.options.add) {
//~ this.regionSelectEl.options.add(option);
this.regionSelectEl.appendChild(option);
} else {
this.regionSelectEl.appendChild(option);
}