Javascript 未捕获类型错误:无法读取属性';价值';空Java脚本的定义 var i=0; 函数addLine(){ i++; var div=document.createElement('div'); div.innerHTML+=''; div.innerHTML+=''; div.innerHTML+=''; div.innerHTML+=''; div.innerHTML+=''; div.innerHTML+=''; document.getElementById('items').appendChild(div); } 功能移除行(div){ document.getElementById('items').removeChild(div.parentNode); } 函数和(){ var q=document.getElementById('quantity')。值; var p=document.getElementById('price')。值; var结果=parseInt(q)*parseInt(p); 如果(q==“”| | p==“”){ document.getElementById('lineTotal')。值=0; } 如果(!isNaN(结果)){ document.getElementById('lineTotal')。值=结果; } }

Javascript 未捕获类型错误:无法读取属性';价值';空Java脚本的定义 var i=0; 函数addLine(){ i++; var div=document.createElement('div'); div.innerHTML+=''; div.innerHTML+=''; div.innerHTML+=''; div.innerHTML+=''; div.innerHTML+=''; div.innerHTML+=''; document.getElementById('items').appendChild(div); } 功能移除行(div){ document.getElementById('items').removeChild(div.parentNode); } 函数和(){ var q=document.getElementById('quantity')。值; var p=document.getElementById('price')。值; var结果=parseInt(q)*parseInt(p); 如果(q==“”| | p==“”){ document.getElementById('lineTotal')。值=0; } 如果(!isNaN(结果)){ document.getElementById('lineTotal')。值=结果; } },javascript,dynamic,row,Javascript,Dynamic,Row,下面是html var i = 0; function addLine() { i++; var div = document.createElement('div'); div.innerHTML += '<input type="text" name="description['+i+']" id="description['+i+']"/>'; div.innerHTML += '<input

下面是html

var i = 0;
function addLine() {
        i++;        
        var div = document.createElement('div');
        div.innerHTML += '<input type="text" name="description['+i+']" id="description['+i+']"/>';
        div.innerHTML += '<input type="text" name="quantity['+i+']" id="quantity['+i+']" onkeyup="sum();"/>';
        div.innerHTML += '<input type="text" name="price['+i+']" id="price['+i+']" onkeyup="sum();"/>';
        div.innerHTML += '<input type="text" name="lineTotal['+i+']" id="lineTotal['+i+']" readonly/>';
        div.innerHTML += '<input type="button" onclick="removeLine(this)" value="-">';
        div.innerHTML += '<input type="button" onclick="addLine();" value="+" />';

        document.getElementById('items').appendChild(div);
    }

    function removeLine(div) {
      document.getElementById('items').removeChild(div.parentNode);
    }

    function sum() {
        var q = document.getElementById('quantity').value;
        var p = document.getElementById('price').value;
        var result = parseInt(q) * parseInt(p);

        if(q=="" || p==""){
            document.getElementById('lineTotal').value = 0;
        }

        if (!isNaN(result)) {
            document.getElementById('lineTotal').value = result;
        } 
    }


</script>

因此,当我尝试添加一个新的行时,它工作得非常好,没有问题

当我对html中的第一行进行计算时,它会毫无问题地完成所有计算,但是当我添加新的动态行时,我无法计算。几天来一直在试图解决这个问题,但仍然没有结果,所以我决定在这里询问

非常感谢你的帮助

非常感谢:)

ID应该是唯一的

另外,我用TR替换了DIV,并添加了TD以与您的表保持一致

<tr>

    <td><input type="text" name="description[]"/></td>
    <td><input type="text" name="quantity[]" id="quantity[]" onkeyup="sum();"/></td>
    <td><input type="text" name="price[]" id="price[]" onkeyup="sum();"/></td>
    <td><input type="text" name="lineTotal[]" id="lineTotal[]" readonly /></td>
    <td><input type="button" onclick="addLine();" value="+" /></td>

</tr>

var i=0;
函数addLine(){
i++;
var行=document.createElement('tr');
var td=document.createElement('td');
td.innerHTML='';
世界其他地区(td);
td=document.createElement('td');
td.innerHTML='';
世界其他地区(td);
td=document.createElement('td');
td.innerHTML='';
世界其他地区(td);
td=document.createElement('td');
td.innerHTML='';
世界其他地区(td);
td=document.createElement('td');
td.innerHTML='';
世界其他地区(td);
td=document.createElement('td');
td.innerHTML='';
世界其他地区(td);
document.getElementById('items').appendChild(行);
}
功能移除行(世界其他地区){
document.getElementById('items').removeChild(行);
}
函数和(一){
var q=document.getElementById('quantity['+i+']')。值;
var p=document.getElementById('price['+i+']')。值;
var结果=parseInt(q)*parseInt(p);
如果(q==“”| | p==“”){
document.getElementById('lineTotal['+i+']')。value=0;
}
如果(!isNaN(结果)){
document.getElementById('lineTotal['+i+']')。value=result;
} 
}

我进行了一些更新,使之能够与带有TRs和TDsdone的real table一起工作:)。。如果要将所有lineTotal计算为小计输出。我该怎么做?抱歉,我对JAVA脚本编写还不太熟悉,我发现很难进行。使用for(j=0;j<table id="items"> <tr> <td><input type="text" name="description[]"/></td> <td><input type="text" name="quantity[]" id="quantity[0]" onkeyup="sum(0);"/></td> <td><input type="text" name="price[]" id="price[0]" onkeyup="sum(0);"/></td> <td><input type="text" name="lineTotal[]" id="lineTotal[0]" readonly /></td> <td><input type="button" onclick="addLine();" value="+" /></td> </tr> </table> <script> var i = 0; function addLine() { i++; var row = document.createElement('tr'); var td = document.createElement('td'); td.innerHTML = '<input type="text" name="description['+i+']" id="description['+i+']"/>'; row.appendChild(td); td = document.createElement('td'); td.innerHTML = '<input type="text" name="quantity['+i+']" id="quantity['+i+']" onkeyup="sum('+i+');"/>'; row.appendChild(td); td = document.createElement('td'); td.innerHTML = '<input type="text" name="price['+i+']" id="price['+i+']" onkeyup="sum('+i+');"/>'; row.appendChild(td); td = document.createElement('td'); td.innerHTML = '<input type="text" name="lineTotal['+i+']" id="lineTotal['+i+']" readonly/>'; row.appendChild(td); td = document.createElement('td'); td.innerHTML = '<input type="button" onclick="removeLine(this.parentNode.parentNode)" value="-">'; row.appendChild(td); td = document.createElement('td'); td.innerHTML = '<input type="button" onclick="addLine();" value="+" />'; row.appendChild(td); document.getElementById('items').appendChild(row); } function removeLine(row) { document.getElementById('items').removeChild(row); } function sum(i) { var q = document.getElementById('quantity['+i+']').value; var p = document.getElementById('price['+i+']').value; var result = parseInt(q) * parseInt(p); if(q=="" || p==""){ document.getElementById('lineTotal['+i+']').value = 0; } if (!isNaN(result)) { document.getElementById('lineTotal['+i+']').value = result; } } </script>