appendChild return无法读取属性' containerDiv'未定义的

时间:2014-05-01 19:05:05

标签: javascript jquery css

我正在尝试将div元素添加到我的顶级div容器中,但由于某种原因我收到错误。

这是我的代码。这是一个按钮,一旦你点击,就应该在屏幕上添加一个框。

为了避免this.的jQuery错误,我在我的类上定义了一个变量,名为self

var self = this;

所以这解决了jQuery错误。

$(this.button).click(function() {
        self.newContainer = new divGenerator();

        self.containerDiv.parentNode.appendChild(self.newContainer.divContainer);

    });

当我打印出来时,真正奇怪的是

console.log("self.newContainer: "+self.newContainer.containerDiv);

我得到“self.newContainer: [object HTMLDivElement]”作为结果。 HTMLDivElement正是我​​需要的,对吧?它是一个节点,appendChild()需要一个节点元素。所以每个人都是正确的。但事实并非如此。为什么呢?

1 个答案:

答案 0 :(得分:0)

在我看来(我可能正在读错了,你必须发布divGenerator的内部让我确定)你的问题只是一个命名错误......如果你愿意的话会输入错误。在以下行中:

self.containerDiv.parentNode.appendChild(self.newContainer.divContainer);

我注意到您在divContainer上呼叫containerDiv而不是self.newContainer。除非您还将某个属性定义为divContainer,否则我猜测您只需将属性调用的名称更改为containerDiv,就像其他代码中的情况一样。



边栏:我注意到你提到了

  

为了避免this的jQuery错误,我在我的类上定义了一个变量,名为self

据我所知,没有这样的错误"在jQuery中。相反,您在使用this时遇到了混淆,this是一个引用当前函数上下文的关键字(即您当前正在操作的对象)。

实际上,您的解决方案是JavaScript中的常用习惯用法,允许您通过在外部作用域中分配给this的变量来引用封闭的上下文。我建议您阅读this article,以澄清您对{{1}}结构的理解以及如何使用它。