【问题标题】:Javascript Increment counter onclick eventJavascript增量计数器onclick事件
【发布时间】:2020-12-17 15:48:38
【问题描述】:

我知道这可能很简单,但我无法从木材自动取款机看到树。 请问你能帮忙吗? 我有一个初始值为 1 的变量,我想在用户每次单击按钮时将其递增 1。 我有这个代码:

let counter = 0;



dPadRight.addEventListener("click", function increment() {
    counter++;
}
);
console.log(counter);

【问题讨论】:

  • 您的函数应该是匿名的(未命名)。所以function () { counter++; }
  • 您每次点击都会增加counter。您的console.log(counter) 并非如此。
  • @pwilcox 我认为这并不重要。我同意伊瓦尔的观点。将控制台日志语句移动到事件处理程序中,它将输出当前计数。
  • @AbrarHossain,我对匿名函数的评论在这里并不重要。但是,关于将控制台语句放入事件处理程序中以增加计数器,这就是我最初提出答案的方式(请参阅编辑历史记录)。但是 OP 评论说他需要“从函数外部”使用计数器变量。所以我认为他会从将增量逻辑与console.log 逻辑分离到不同的函数中受益。
  • @pwilcox 我在写评论之前没有检查你的编辑历史,所以请原谅。关于OP的“外部”要求,有点模糊。是在函数范围还是全局范围之外?假设它是全局范围,则声明后的任何代码或函数都可以完全访问它。这将取决于脚本的复杂性。

标签: javascript counter addeventlistener


【解决方案1】:

我们没有您的 html 标记,所以下面我只是创建了一个 ID 为“dPadRight”的 div 来添加侦听器。然后我在 javascript 代码中的一个变量中引用了它。我假设你已经在做这样的事情来拥有一个名为“dPadRight”的变量。

根据您描述您需要“将 [计数器] 用于其他事情”的评论,我添加了另一个标识为“otherPad”的“pad”。 “dPadRight”可以用来增加计数器。 “otherPad”可以用来对计数器做一些事情。在下面的代码中,我只是记录它。

这里的教训是,如果您想在计数器递增后使用它——好吧——那么你不能在主要的 javascript 正文中引用它,因为那是在它有机会递增之前。

let dPadRight = document.querySelector('#dPadRight');
let otherPad = document.querySelector('#otherPad');

let counter = 0;

dPadRight.addEventListener("click", () => {
    counter++;
});

otherPad.addEventListener("click", () => {
    console.log(counter);
});
<div id="dPadRight">
   click to increment counter
</div>
<br/>
<div id="otherPad">
   click to log counter
</div>

【讨论】:

  • 谢谢,但我想从我的函数之外访问计数器,因为我要用它来做其他事情......我确实设法让它与你做的方式一起工作。 ...关于如何实现我需要的任何想法?
  • 我编辑了这个问题。希望它对您有更好的用处。
【解决方案2】:

试试这个

let counter = 1;


let dPadRight = document.getElementById('dPadRight');

dPadRight.addEventListener("click", function() {
   console.log(counter);
   counter++;
   if(counter > 5){
    // just to show that counter is available outside the annonymous 
    // function
     let bla = getCounterValue();
      console.log("Bla Value " + bla);
       }
 
}
);
function getCounterValue(){
   return counter;
}
&lt;button id="dPadRight"&gt;Increment Me &lt;/button&gt;

【讨论】:

  • 谢谢,但我想从我的函数之外访问计数器,因为我要用它来做其他事情......我确实设法让它与你做的方式一起工作。 ...关于如何实现我需要的任何想法?
  • 你可以在它不是块本地的函数之外使用它
  • 感谢您抽出宝贵时间。这也是我的想法,但不幸的是它不起作用......它看起来像绑定到函数:``` let counter = 1; dPadRight.addEventListener("点击", function () { console.log(counter); counter++; });控制台.log(计数器); ```
  • 我现在可能会关注这个......但我不明白你的更新答案如何成为我的解决方案。是的,您可以在同一函数内的 if 语句中访问计数器的值,但鉴于您尚未调用名为 getCounterValue 的另一个函数,我不知道您是否可以访问它...
  • 因为该值在另一个块中可用,我认为这可能表明可以在外部使用该值。在您的原始帖子中,问题不在于增量这工作正常问题是您不再调用控制台日志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多