我正在为网站进行跨浏览器兼容性升级,并遇到了一个非常有趣的问题。
当前的JavaScript使用document.all("whatever").value
来访问隐藏输入,文本框,复选框等的值。
我已阅读文章和帖子,指出document.all("")
无法在Firefox / Chrome中使用,请使用document.getElementById("")
,因为这是所有浏览器的标准。
所以,我决定测试我们当前的网站并通过JavaScript进行调试,看到document.all
实际上是 UNDEFINED ,并且无法提取它试图访问的值...很酷吗?
好吧,我写了一个简单的HTML页面,只做一个简单的测试。我创建了一个text类型的输入并放置:
<input id="testinput" name="testinput" type="textbox" value="5" />
然后我的JavaScript调用如下:
alert(document.all("testinput").value);
结果?每次浏览器都会在警报中显示该值。更有趣的是,当我调试JavaScript时,我输入了命令窗口(chrome)document.all
,输出未定义......但document.all("testinput").value
的输出为5.
我在这里缺少什么?
document.all
实际上是否适用于现代浏览器,但不推荐使用?我希望有人可以对此有所了解,因为这种替换会导致许多代码被更改。
答案 0 :(得分:1)
是。这正是它的工作原理。
问题是一些遗留网页测试document.all作为检查IE的方法。然后,JS代码有两个代码路径,一个用于IE,另一个用于其他浏览器。另一方面,其他遗留页面盲目地使用document.all,假设它只需要与IE一起工作,因为它是在IE使用时非常受欢迎的浏览器中创建的。
由于后面的页面只会在非IE浏览器中中断,这对于这些浏览器的市场份额或声誉不利,因此它们实现了document.all()以应对它们。但是因为在前一种情况下,他们希望JS代码遵循非IE代码路径,对于document.all本身(以及其他几种类似的方法来测试document.all的存在),它们返回“undefined”。
有关详细信息,请参阅http://www.w3.org/html/wg/drafts/html/master/obsolete.html#dom-document-all