【问题标题】:IE8 getElementById quirks modeIE8 getElementById 怪癖模式
【发布时间】:2013-03-15 20:57:50
【问题描述】:

我在我的 JSP 中定义了这个函数:

function addcolor(){
    alert("found " + document.getElementById("clrCd").value);
}

我的 HTML(来自 struts 1.3 应用)

<input type="text" name="clrCd" maxlength="2" size="2" value="">
<input type="button" name="add" value="ADD" onclick="addcolor()">

当我的浏览器处于怪异模式时,我点击添加按钮,我会收到带有文本输入值的警报

如果我将浏览器置于 IE8 标准模式(通过 F12 控制台)并运行相同的代码,我会得到:

错误:无法获取属性“值”的值:对象为空或 未定义

到底为什么会发生这种情况......我已经浪费了一整天的时间来处理 IE 和所有这些都是废话。

这是一个遗留应用程序,我不能真正改变太多,但我真的很想把它们从怪癖模式中解脱出来,这样我们就可以开始使用一些 HTML5 功能,比如 bootstrap 和 angularJS。

有什么想法吗?

杰森

【问题讨论】:

    标签: javascript internet-explorer-8 quirks-mode


    【解决方案1】:

    这不是“IE 废话”,而是您没有任何 id 为 clrCd 的元素。您只设置了 name 属性。

    在您的元素中添加id="clrCd",您将获得更多好运。

    【讨论】:

    • 是的....与所有其他 IE 主义以及 struts *域名作斗争,使我免受 HTML 的阻碍。对咆哮感到抱歉(即使 IE 确实很烂)。我不得不在 struts nested.tld 中使用“styleId”,它变成了 ID 属性。它让我发疯,因为它在怪癖模式而不是 IE8 标准模式下工作......无论如何......再次感谢您的快速和有用的回复
    • 我知道这已经过时了,但我想我也许可以帮助下一个人。当 IE 处于 quirks 模式时,getElementById( foo ) 将返回一个 ID="foo" OR NAME="foo" 的元素。我关闭了 quirks 模式,这样我就可以修复 CSS 并且它破坏了脚本。
    • @Jason,哇!我不知道这是可能的。您应该将其添加为答案并选择它。
    【解决方案2】:

    其实IE7之前你可以这样做 见文档

    http://msdn.microsoft.com/en-us/library/ie/ms536437(v=vs.85).aspx

    Windows Internet Explorer 8 及更高版本。在 IE8 标准模式下,getElementById 仅对 ID 属性执行区分大小写的匹配。在 IE7 标准模式和以前的模式下,此方法对 ID 和 NAME 属性执行不区分大小写的匹配

    【讨论】: