当前位置: 首页 > 知识库问答 >
问题:

如何修复enter键运行函数两次而只被调用一次的keypress事件

戎洛华
2023-03-14

我正在创建一个小费计算器。我在页面上有一个按钮,如果你按下它或者你按下键盘上的enter键,它就会计算出小费。当我按enter键时,计算提示的函数会运行,但随后它会再次运行,尽管我在代码中没有再次调用它。奇怪的是,第二次运行时,它进入存储函数的变量,运行函数。我不知道为什么它会进入一个没有被调用的变量。

我试着调试,看看是否遗漏了一个步骤,是否在某个地方调用了函数两次,但没有。

下面是按键事件:

document.addEventListener('keypress', function(event) {
      if (event.keycode === 13 || event.which === 13) {
        calculateTip();
      }

然后紧跟在代码后面的是calculateTip变量:

var calculateTip = function() {
   some code that does calculations
}

按键按下后,执行calculateTip,然后直接进入上面的变量再次运行calculateTip。

我的生活里有我的密码。我已经测试过了,看看这个生命之外的代码是否影响了什么,但它没有。“Click”事件侦听器工作完美,只执行一次calculateTip函数。在我的这个版本的代码中,如果单击enter,计算提示会将'test'打印到控制台两次。

生活:

var controller = (function(calcCtrl, UICtrl) {

  var setupEventListeners = function() {

    var DOM = UICtrl.getDOMstrings();

    document.querySelector(DOM.button).addEventListener('click', calculateTip);

    document.addEventListener('keypress', function(event) {
      if (event.keycode === 13 || event.which === 13) {
        calculateTip();
      }
    });
  };

var calculateTip = function() {
 console.log('test')
};

return {
    init: function() {
      setupEventListeners();
    }
  }

})(calculateController, UIController);

controller.init();

共有2个答案

岑熙云
2023-03-14

这是一次,请你看看这个。

<script type="text/javascript">
    document.addEventListener('keypress', function(event) {
          if (event.keycode === 13 || event.which === 13) {
            calculateTip();
          }
     });
    var calculateTip = function() {
       console.log("enter clicked");
    }
</script>
裴曜灿
2023-03-14

通过jquery,您可以解决这个问题

$(document).unbind('keypress').bind('keypress', function (e) {
    if (e.keycode === 13 || e.which === 13) {
    calculateTip();
  }
});
 类似资料:
  • 确保函数只被调用一次。 使用一个闭包,使用一个成为 called 的标志,并在第一次调用该函数时将其设置为 true ,以防止它被再次调用。 为了允许函数改变它的 this 上下文(比如在一个事件监听器中),必须使用function 关键字,并且提供的函数必须应用上下文。 允许使用 rest(剩余)/spread(展开) (...) 运算符为函数提供任意数量的参数。 const once = fn

  • 编辑:由于代码剪贴不会重现错误-这里有一个指向github repo的链接:(代码远未完成) https://github.com/altruios/clicker-game 我现在已经在两台计算机上运行了它——这两台计算机都有相同的行为,而代码剪报并没有显示出来。 因此,我正在构建一个clicker游戏来学习react,我不明白为什么这段代码会以这种方式运行: 在主应用程序中,我有以下功能: 那

  • 在我的应用程序中,我将TextWatcher放在EditText上。当我更改EditText的文本时,TextWatcher的事件会被调用两次。 我正在使用模拟器来运行应用程序。

  • 问题内容: 为什么在组合框中选择项目时会两次调用此事件? 问题答案: 对于一次更改,JComoboBox ItemListener确实会被调用两次。一次用于SELECTED事件,一次用于DESELECTED事件。 有关如何编写ItemListener的信息,请参见本教程页面。 基本上你要做的就是

  • 当我在其上传递一个帐户时,我的if会运行两次 所以是正确的: 因此它执行两次: 如何使用-400只运行一次?

  • 每个人我最近在学习如何反应。正如这个链接所说,我学到了一个教训:react函数加载两次。但当我验证它时,我发现它确实加载了两次,但Chrome浏览器只打印了一次。我想知道为什么?这是我验证过的代码。 我认为铬应该混合。日志 1 App.js: 9我已经跑了1次!2pp.js: 9我已经跑了两次了! 我想知道为什么。非常感谢。