Javascript 同一事件的addEventListener

Javascript 同一事件的addEventListener,javascript,addeventlistener,Javascript,Addeventlistener,所以我有几个div标签,我现在已经隐藏了,我想通过点击enter键一个接一个地显示它们 我希望发生的事情:我点击回车键,第一个div标签显示出来,然后我再次点击回车键,看到第二个div标签 发生了什么:我按了一下enter键,两个div标记都显示出来了 在本例中,我要展示的第一个div标记是“intro”,第二个是“body”。我在jsbin上运行这个网站,如果有帮助的话,我正在使用chrome 这是我的JavaScript: //********************************

所以我有几个div标签,我现在已经隐藏了,我想通过点击enter键一个接一个地显示它们

我希望发生的事情:我点击回车键,第一个div标签显示出来,然后我再次点击回车键,看到第二个div标签

发生了什么:我按了一下enter键,两个div标记都显示出来了

在本例中,我要展示的第一个div标记是“intro”,第二个是“body”。我在jsbin上运行这个网站,如果有帮助的话,我正在使用chrome

这是我的JavaScript:

//***********************************************************

//  BODY MODULE

var bodyController = (function(){
  var enterBool;

  var reveal = function(){
    if(enterBool){
      document.getElementById("evidence").style.display = "block";
      enterBool = false;
    }
  };

  var enterListen = function(){
    document.addEventListener("keydown", function(event){
      if(event.keyCode === 13){
        document.addEventListener("keyup", function(event){
          if(event.keyCode === 13){
            enterBool = true;
            reveal();
          }
        });
      }
    });
  };

  return{
    enterBoolBody: enterBool,
    enterListenBody: function(){
      enterListen();
    }
  }
})();

//***********************************************************

//  INTRO MODULE

var introController = (function(){
  var enterBool;

  var reveal = function(){
    if(enterBool){
      document.getElementById("body").style.display = "block";
      enterBool = false;
    }
  };

  var enterListen = function(){
    document.addEventListener("keydown", function(event){
      if(event.keyCode === 13){
        document.addEventListener("keyup", function(event){
          if(event.keyCode === 13){
            enterBool = true;
            reveal();
          }
        });
      }
    });
  };

  return{
    enterBoolIntro: enterBool,
    enterListenIntro: function(){
      enterListen();
    }
  }
})();

 //***********************************************************

 //  CONTROL MODULE

 var controller = (function(introCtrl, bodyCtrl, evidenceCtrl, infoCtrl, 
 conclusionCtrl){  
  var eventListeners = function(){
     introCtrl.enterListenIntro();
     bodyCtrl.enterListenBody();
  };

  return{
    init: function(){
      eventListeners();
    }
  }
 })(introController, bodyController, evidenceController, 
    infoController, conclusionController);

 //***********************************************************

 controller.init();

我想你可能设计得有点过头了。您只需要一个事件侦听器来检查enter。然后检查是否显示了第一个div,如果没有显示它。如果显示第一个div,请检查是否显示第二个div并显示它

请注意,如果类列表对您很重要,则不支持IE9。

(功能(窗口、文档、未定义)
{
文件。添加的监听器('keyup',showDivs,false);
})(窗口,窗口,文件);
函数showDivs(事件)
{
event=event | | window.event;
var divsToShow=document.getElementsByClassName(“Display Div”);
对于(var i=0;i
。隐藏{
显示:无;
}
.街区{
显示:块;
}
这个
现在
作品
具有
任何
Div
具有
等级

Display Div
我想你可能有点过度设计了。您只需要一个事件侦听器来检查enter。然后检查是否显示了第一个div,如果没有显示它。如果显示第一个div,请检查是否显示第二个div并显示它

请注意,如果类列表对您很重要,则不支持IE9。

(功能(窗口、文档、未定义)
{
文件。添加的监听器('keyup',showDivs,false);
})(窗口,窗口,文件);
函数showDivs(事件)
{
event=event | | window.event;
var divsToShow=document.getElementsByClassName(“Display Div”);
对于(var i=0;i
。隐藏{
显示:无;
}
.街区{
显示:块;
}
这个
现在
作品
具有
任何
Div
具有
等级

Display Div
您可以将Div的id放入一个数组中,也可以为要逐个显示的所有Div分配一个公共类。假设是第一个,这段代码只是从数组中获取要显示的下一个div的id,并递增计数器。您可以向数组中添加更多div,这样就可以了

var divs = ["evidence", "body"];
var counter = 0;
document.addEventListener("keyup", function(event){
  if(counter < divs.length && event.keyCode == 13){
    document.getElementById(divs[counter]).style.display = 'block';
    counter++;
  }
});
var divs=[“证据”、“主体”];
var计数器=0;
文件。添加事件列表器(“键控”,功能(事件){
if(计数器
您可以将div的id放入一个数组中,也可以为要逐个显示的所有div分配一个公共类。假设是第一个,这段代码只是从数组中获取要显示的下一个div的id,并递增计数器。您可以向数组中添加更多div,这样就可以了

var divs = ["evidence", "body"];
var counter = 0;
document.addEventListener("keyup", function(event){
  if(counter < divs.length && event.keyCode == 13){
    document.getElementById(divs[counter]).style.display = 'block';
    counter++;
  }
});
var divs=[“证据”、“主体”];
var计数器=0;
文件。添加事件列表器(“键控”,功能(事件){
if(计数器
为什么要在事件中绑定事件?您指的是:document.addEventListener(“keydown”,function(event){if(event.keyCode==13){document.addEventListener(“keyup”,function(event){if(event.keyCode==13){enterBool=true;reveal();}}}});如果是这样的话,我是这样写的,因为我认为这样可以确保在检查密钥是否会再次下降之前,密钥已经恢复。我对JS非常陌生,因此,任何帮助都将不胜感激。请确保该键已恢复:只有当该键启动时才会触发keyup事件,因此我认为您只需要添加keyup eventListener我确实有一个keyup eventListener:/为什么要在事件中绑定事件?您是指:document.addEventListener(“keydown”,function(event){if(event.keyCode==13){document.addEventListener(“keyup”,函数(event){if(event.keyCode==13){enterBool=true;reveal();}}}});如果是这样,我是这样写的,因为我认为这样可以确保在检查密钥是否会再次下降之前,密钥已经恢复。我对JS非常陌生,因此非常感谢您提供的任何帮助。确保密钥已恢复:密钥恢复事件仅在密钥恢复时触发,因此我认为您只需要添加密钥恢复事件stenerI do have a keyup eventListener:/我想我尝试了你的方法,但没有成功。我想我可能不支持classList。我也不知道如何检查。我还想用至少两个以上的div标记继续这个过程,我想你的方法可能不适合2个以上的div标记。除非你认为我真的应该这样做使用一堆if-else,或者switch语句。任何现代浏览器都应该支持classList。如果你想添加更多div,你可以使用类似James的解决方案,将它们放入数组或添加特定的类。我将使用多个div支持更新答案。我想我已经尝试了你的方法,但没有成功。我想我可能不支持类列表。我也不确定如何检查此问题。我还想用至少2个以上的div标记继续此过程,我认为您的方法可能不是2个以上div标记的最佳方法。除非您认为我真的应该使用一组if-else或switch语句。任何现代浏览器都应该支持类列表。如果您愿意的话添加更多div