无法更改内部HTML

时间:2014-07-14 12:40:03

标签: javascript dom

function order(){
var i = 1;
while(i != 0){
    if(sessionStorage.getItem("taska"+i)!=null){
        var p1 = sessionStorage.getItem("taska"+i);
        var p2 = sessionStorage.getItem("price"+i);

        var a = document.createElement('td');
            a.innerHTML = sessionStorage.getItem("id"+i);
        var b = document.createElement('td');
            var b1 = document.createElement('img');
                b1.src = '/obrazky/taska_'+p1+'.png';
            b.appendChild(b1);
        var c = document.createElement('td');
            c.innerHTML = p1;
        var d = document.createElement('td');
            d.innerHTML = ''+p2+' Kč';
        var e = document.createElement('td');
            var e1 = document.createElement('input');
                e1.type = 'number';
                e1.setAttribute("id", i);
                e1.onclick = totalPrice(this);
            e.appendChild(e1);
        var f = document.createElement('td');
            f.setAttribute("id", "total"+i);
            f.innerHTML = ''+p2+' Kč';


        document.getElementById('tr'+i).appendChild(a);
        document.getElementById('tr'+i).appendChild(b);
        document.getElementById('tr'+i).appendChild(c);
        document.getElementById('tr'+i).appendChild(d);
        document.getElementById('tr'+i).appendChild(e);
        document.getElementById('tr'+i).appendChild(f);
        i++;
    }else{
        i=0;
    }
}
}
function totalPrice(nofitems){
    var x = nofitems.id;
    var y = nofitems.value*Number(sessionStorage.getItem("price"+x));
    document.getElementById('total'+x).innerHTML = y+' Kč';
}

我已创建函数顺序以插入一些html元素。我希望在项目的数量增加时更改元素var f。我正在使用totalPrice函数执行此操作,但无论何时调用它,控制台都会弹出:

未捕获的TypeError:无法设置null

的属性'innerHTML'

我认为,它无法通过id找到创建的元素。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

首先,我在这行代码中看到了一些不对的东西:

  e1.onclick = totalPrice(this);

这不会将totalPrice函数附加到e1元素的onclick事件。此外,当前上下文中的关键字this是指窗口对象,因此将其作为参数发送到totalPrice函数没有任何意义它应该是这样的:

e1.onclick = totalPrice;

您还应该调整totalPrice函数以获取项目的总数并相应地计算价格

编辑:该功能应如下所示

function totalPrice(){
    var x = this.id;
    var y = this.value*Number(sessionStorage.getItem("price"+x));
    document.getElementById('total'+x).innerHTML = y+' Kč';
}

答案 1 :(得分:0)

尝试创建文本节点并将其添加到元素f http://www.w3schools.com/jsref/met_document_createtextnode.asp

如果还不够,请尝试换掉这一行:

  

f.setAttribute(“id”,“total”+ i);

这一行:

  

f.id =“total”+ i;

参考:

setting the id attribute of an input element dynamically in IE: alternative for setAttribute method

http://www.w3schools.com/jsref/prop_html_id.asp