首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >document.getElementById('someId')导致"Object不支持属性或方法'getElementById'“

document.getElementById('someId')导致"Object不支持属性或方法'getElementById'“
EN

Stack Overflow用户
提问于 2014-09-16 12:50:02
回答 1查看 3.5K关注 0票数 0

我在Internet 9中有一个奇怪的JavaScript异常:

该电文翻译成英文,内容如下:

对象不支持属性或方法“getElementById”

但是,当我通过document.getElementById控制台执行JavaScript时,将找到该函数。事实上,如果我执行导致异常的整个语句,它就成功了!(c.f.截图)。

造成这种奇怪的原因是什么?document应该一直都有一个getElementById方法,不是吗?如果我在调试器中重试,为什么相同的语句会成功呢?

我可以重现Internet 9的问题,但IE 11或Firefox不能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-17 18:11:51

进一步的分析表明:

由于JavaScript函数是在元素的事件处理程序属性中声明的,该元素成为函数的词法作用域链的一部分,从而导致该元素的document属性隐藏window.document的全局声明。(如果不清楚,我建议您阅读事件处理程序的范围)。

此外,在调用函数之前,文档中的jQuery DOM操作已经替换了该节点。这导致Internet 9更新该元素的文档属性以指向创建的DocumentFragment jQuery。

因此,函数意外地使用了元素document属性,并得到了一个DocumentFragment,其中期望有一个完整的文档。DocumentFragment不具有getElementById方法的特性。

我已经解决了这个问题,并且阻止了从词法作用域链中进一步推断,但是将事件处理程序封装到用函数构造函数创建的函数中,这使得它不能继承词法作用域。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25869254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档