我设计了一个计数器,每个都有3个按钮(向上,向下和移除计数器)。我可以添加计数器。每个新的计数器工作得很好,但其他计数器继续从新计数器计数。我想我应该创建数组n,对于n(i)我们应该有数(i)?如果是真的那么我怎么做呢?
我该如何解决?
var up = document.getElementsByClassName("up");
var n = 0;
for (i = 0; i < up.length; i++) {
up[i].addEventListener("click", function (){
var input = this.parentElement.getElementsByClassName("input");
n++;
input[0].innerHTML = parseInt( input[0].innerHTML ) + 1;
});
};
<button class="up">up</button>
<div class="input">0</div>
答案 0 :(得分:0)
您要将事件监听器添加到每个&#39; up&#39;并且&#39; down&#39;每次运行upDownCounter()
因此,页面上的第一个计数器每次都会获得单击侦听器 - 如果在事件侦听器中添加console.log()
,则会看到它为旧计数器运行多次。
up[i].addEventListener("click", function (){
console.log('up click'
...
});
如果您有3个计数器,请点击&#39;向上&#39;在第一个将记录&#34;向上点击&#34; 3次,第二次将记录两次,最新1次,因为它只会添加一次事件监听器。
另外,我认为你的var范围是关闭的,你的n
变量对所有计数器都是通用的,它需要在click处理程序中声明。
你可以改用它:
input[0].innerHTML = parseInt( input[0].innerHTML ) + 1;
代码可以通过一些重构来实现,它会重复很多并且有点难以理解。