BIG陽
2023-05-11 14:13:20
我正在制作一個用于學習的計數器應用程序,在給計數器名稱后,計數器在 onclick 事件中遞增 1 這在只有計數器時工作正常但如果我添加多個名稱它會在新計數器上采用最后一個增量值,基本上每個新創建的計數器的增量應該是分開的。let counter = 0function updateCount() { let progressCountUpdate = document.getElementsByClassName("progress-count") for (var i = 0; i < progressCountUpdate.length; i++) { progressCountUpdate[i].onclick = function () { this.childNodes[1].innerText = counter++ } }}function createProgress() { progressCount = document.createElement("div") progressCount.className = "progress-count" progressNameNew = document.createElement("span") progressNameNew.innerText = progresslabel.value; progressNameNew.className = 'progress-name' progressCountNumber = document.createElement("span") progressCountNumber.innerText = 0 progressCountNumber.className = "progress-counter" progressCount.appendChild(progressNameNew) progressCount.appendChild(progressCountNumber) progressDisplay.appendChild(progressCount) progresslabel.value = "" updateCount()}addbutton.onclick = function () { if (progresslabel.value === "") { alert("enter progress name") } else { checkStartEndTime(); createProgress(); }}<div class="progress-display"></div>如何確保每個計數器的增量都是獨立的。
1 回答

HUWWW
TA貢獻1874條經驗 獲得超12個贊
您可以創建一個閉包函數,以便為每個單獨的onclick函數添加一個計數器,如下所示:
function updateCount() {
let progressCountUpdate = document.getElementsByClassName("progress-count");
for (let el of progressCountUpdate) {
if (el.getAttribute('hasOnClick') !== 'true') {
el.onclick = (function() {
const childNode = el.childNodes[1];
let counter = 0;
el.setAttribute('hasOnClick', 'true'); // set a flag so it won't reset every update
return function() {
return childNode.innerText = counter++;
}
})();
}
}
}
添加回答
舉報
0/150
提交
取消