#javascript
#javascript
Вопрос:
Я создаю приложение счетчика для обучения, после присвоения имени счетчика счетчик увеличивается на 1 при событии onclick. это работает нормально, когда есть только счетчик, но если я добавляю несколько имен, он принимает последнее значение приращения для нового счетчика, в основном приращения должны быть отдельными для каждого вновь созданного счетчика.
let counter = 0
function 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. Пожалуйста, также опубликуйте html-часть.
2. @Gh05d html-часть — это просто div, остальное содержимое создается событиями.
Ответ №1:
вы можете создать функцию закрытия, чтобы добавить счетчик к каждой отдельной 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 ;
}
})();
}
}
}
Комментарии:
1. даже при этом при добавлении нового имени счетчика он начинается с 0, но если я сейчас попытаюсь обновить старые счетчики, он просто начинается с последнего увеличенного значения. например, новое значение счетчика = 10, старый счетчик = 21, при повторном нажатии на старый счетчик счетчик начинается с 11 и так далее.
2. Я хочу, чтобы оба счетчика имели свои собственные индивидуальные приращения
3. хорошо, я отредактировал свой ответ. Думаю, теперь я понимаю, что вы пытаетесь сделать. Если я ошибся, пожалуйста, дайте мне знать
4. спасибо, что уделили этому время, я действительно ценю это :). Что происходит сейчас, так это то, что всякий раз, когда я добавляю новый счетчик, все предыдущие счетчики сбрасываются до 1, так как приращение снова начинается с 1 . это происходит только всякий раз, когда добавляется новый счетчик, но в остальном он работает по назначению.
5. Я добавил флаг к элементу, чтобы он не сбрасывался при каждом запуске
updateCount
функции