-1

我在计数器功能中动态发送值,即按钮可以是计数器(0)、计数器(1)、计数器(2)等。

现在说如果count = 0(即counter(0)),那么我想增加全局变量i。

现在 count = 1,然后将全局变量 i 重置为 0 并再次从 first 开始递增。

同样,假设按钮计数器再次为 0,并且计数器 0 的最后增量为 4,则它必须从 5 开始。

我怎么能在javascript中做到这一点。有可能这样做吗?

var i =0;
function counter(count){
i++;
}
<button type="button" onclick=counter(0)>Change counter</button>

var count = 0;
function myfunction() {
         <button type="button" onclick="counter(` + count + `)" class="btn btn-primary rounded-0 float-right">Change Counter</button>
         count++;
                }

4

3 回答 3

2

每个号码都需要一个单独的计数器。你不能用一个单一的全局来做到这一点。否则,当您更改单击的按钮时它会重置,并且当您返回上一个按钮时,您永远无法恢复旧值。

使用一个对象来存储计数器。

如果您需要具有最近操作计数器的最新值的全局值,请稍后将值复制到它。

let lastCounterValue = 0;
const counters = {};

const increment = event => {
  const button = event.currentTarget;
  const counterId = button.textContent;
  if (!(counterId in counters)) {
    counters[counterId] = 0;
  }
  counters[counterId]++;
  lastCounterValue = counters[counterId];
  console.log({
    lastCounterValue,
    counters
  });
}

document.querySelectorAll("button").forEach(button => button.addEventListener("click", increment));
<button>0</button>
<button>1</button>
<button>2</button>
<button>3</button>

于 2021-01-30T18:58:25.767 回答
1

I would keep an array for each button with an unique identifier.

HTML

<button type="button" onclick="counter('a', 0)">Change counter</button>
<button type="button" onclick="counter('b', 3)"">Change counter</button>

JS

var clickArr = {};
function counter(id, count){
   clickArr[id] = !isNaN(clickArr[id]) ? (clickArr[id]+1) : count;
   console.log(clickArr);
}
于 2021-01-30T19:01:30.960 回答
-1

var i = 0;

function cal() {
  let cache = 0;
  return function(count) {
    if (count == 0) {
      if (i == 0) {
        i = ++cache;
        // use memoized val
      } else {
        i++;
        cache = i;
        // increment
      }
    } else if (count == 1) {
      /*set to 0, don't update cache now, 
      wait for next input */
      i = 0;
    } else {
      i = count;
      cache = count;
    }
  }
}

var counter = cal();
counter(0)
counter(0)
counter(0)
console.log('3', i)
counter(99)
console.log('99', i)
counter(1)
counter(0)
console.log('100', i)

于 2021-01-30T19:19:57.530 回答