3 回答

TA貢獻2080條經驗 獲得超4個贊
您將重置arrPrice每次運行,這會將其設置為最新的元素。一種解決方案是使數組成為全局數組并在函數調用中附加到它:
var arrPrice = [];
function insert() {
var i = 0;
var t = 0;
var c = 0;
var sum = 0;
var arrName = [];
arrName[i] = document.getElementById("name").value;
arrPrice.push(document.getElementById("price").value);
var table = document.getElementById("tabl3");
var row = table.insertRow(1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
cell1.innerHTML = arrName[i];
cell2.innerHTML = arrPrice[i];
i++;
while (t < arrPrice.length) {
arrPrice[t] = arrPrice[t] * 1;
sum = sum + arrPrice[t];
t++;
}
document.getElementById("totalprice").innerHTML = sum;
}
編輯:我看到很多人評論說你sum每次都在設置。雖然更改此設置將使您的代碼正常工作,但邏輯已被破壞。您的方法是創建一個數組并在每次調用時對其進行求和insert,而不是添加到運行總和中。我認為其他答案正在尋找快速修復方法,并且不介意破壞現有代碼的邏輯。

TA貢獻1963條經驗 獲得超6個贊
sum每次插入新值時都會重置。每次嘗試重新計算。無需循環
function insert() {
let insertedName = document.getElementById("name").value;
let insertedPrice = parseFloat(document.getElementById("price").value);
var table = document.getElementById("tabl3");
var row = table.insertRow(1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
cell1.innerHTML = insertedName;
cell2.innerHTML = insertedPrice;
const totalPrice = document.getElementById('totalprice');
totalPrice.innerText = parseFloat(totalPrice.innerText || "0") + insertedPrice;
}
table,
th,
td {
border: 1px solid black;
border-spacing: 0px;
width: 150px
}
Name: <input type="text" id="name"><br> Price: <input type="number" id="price"><br>
<button id="ins" onclick="insert()">Insert</button>
<p> </p>
<table id="tabl3">
<tr>
<td>Item</td>
<td>Price</td>
</tr>
<tr>
<td>Total</td>
<td id="totalprice"></td>
</tr>
</table>

TA貢獻1843條經驗 獲得超7個贊
在你的函數中你所做的sum = 0
。所以每次當你調用你的函數時,你的總和就會變成0。要解決這個問題,只需使你的sum
全局。只需將其放在您的函數之外即可。
添加回答
舉報