2012-11-18 146 views
0

以下代码是为了使杠杆前后移动并更改正方形的颜色。但是,下面是我卡住的元素的裸露骨骼。 IE给我的错误是“属性的值'appendChild':object is null or undefined”它位于代码中的XXXXX处。另外,当我写这个代码的时候,我对使用“”和什么时候使用“的时候感到困惑。它运行良好,直到XXXX出现错误。javascript:未知 - 为何未定义变量

function sliderBox(style){ 
    this.style = style; 
    var line = null; 
    var bar = null; 
    var divElem1 = document.createElement('div'); 
    this.divElem = divElem1.setAttribute('class', 'sliderBox'); 

    this.constructDOM = function(){ 
    line = new sliderLine(); 
    bar = new sliderBar(style); 
    var ldE = line.divElem; 
    ldE.appendChild(bar.divElem); XXXXXX PROBLEM HERE 
    var tdE = this.divElem; 
    tdE.appendChild(line.divElem); 
    }  


} 

    function sliderLine(){ 
    var divElem1 = document.createElement('div'); 
    this.divElem = divElem1.setAttribute("class", "sliderLine"); 
    } 

    function sliderBar(style){ 
    this.style = style; 
    var divElem1 = document.createElement('div'); 
    var sBs = "sliderBar" + style; 
    this.divElem = divElem1.setAttribute('class', sBs); 
    } 

有人知道吗?

+0

node.setAttribute()返回undefined,而不是节点 – user943702

+0

@ user943702你是什么意思? – user963070

+0

.setAttribute方法可以完成这项工作,但它的返回值不是对象(上下文)本身,而是未定义的。 @ user963070我建议你先学习JavaScript,然后解决问题。 – benqus

回答

1

您正在将divElem分配给代码最后一行中setAttribute的返回值。 setAttribute的返回值为null或undefined [1]。当您尝试在标有XXXX的行中追加儿童时,会出现错误。你应该改变你滑块功能

function sliderBar(style){ 
    this.style = style; 
    var divElem1 = document.createElement('div'); 
    var sBs = "sliderBar" + style; 
    divElem1.setAttribute('class', sBs); 
    this.divElem = divElem1; 
} 

[1] http://reference.sitepoint.com/javascript/Element/setAttribute

0

总之,element.setAttribute方法没有返回值(见this)。换句话说,您在sliderLine构造函数中不指定this.divElem。这就是为什么line(sliderLine实例)的属性divElem没有任何意义。可以实施“无”,如undefinednull,其不获得任何财产。因此,当我们尝试访问nullundefined上的一个属性时,IE给了我们“对象为空或未定义”。