keyup javascript上的addEventListener一次

adn*_*adn 3 javascript function keydown

我想在键盘输入后运行countup();并运行random();.但是我想这是第一次唯一的工作.我的意思是当我第一次点击进入时,它将运行该功能.但是如果这些功能已经运行并再次点击输入,它将永远不会产生任何影响.

这是我的代码:

addEventListener("keydown", function(e){
    if (e.keyCode === 13) {
        countup();
        random();
    }
});
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?谢谢.

Fri*_*ons 11

做这样的事情

// Create a named function as your event handler
var myFunction = function (e) {
  if (e.keyCode === 13) {
    // Do your stuff here
    countup();
    random();

    // Remove event listener so that next time it is not triggered
    removeEventListener("keydown", myFunction);
  }
};

// Bind "keydown" event
addEventListener("keydown", myFunction);
Run Code Online (Sandbox Code Playgroud)

  • 绝对是更好的方法. (2认同)

小智 6

想法是用户一个全局变量,在触发事件后设置它。

var is_fired = false;
addEventListener("keydown", function(e){
    if (e.keyCode === 13 && is_fired == false) {
        countup();
        random();
        is_fired = true
    }
});
Run Code Online (Sandbox Code Playgroud)


Ogh*_*hli 5

您可以使单击事件侦听器在触发后仅工作一次。您只需添加另一个参数即可addEventListener(){once:true}它将按预期工作:

addEventListener("keydown", function(e){
      if (e.keyCode === 13) {
        countup();
        random();
      }
},{once: true});
Run Code Online (Sandbox Code Playgroud)

看看我的问题,和你的情况类似。

您也可以只使用removeEventListener()方法,但您应该先将匿名函数定义为外部函数myKeyPressed(),然后在 if 条件从元素中删除事件监听器内部:

element.removeEventListener("keydown", myKeyPressed);
Run Code Online (Sandbox Code Playgroud)