代码之家  ›  专栏  ›  技术社区  ›  Eugene Yarmash

如何让程序在javascript中等待按钮按下?

  •  2
  • Eugene Yarmash  · 技术社区  · 16 年前

    我需要修改一些遗留的javascript代码。有一个地方我想等到用户按下两个按钮中的一个,然后继续程序流(比如 prompt() 函数)。如何实现这一目标?

    5 回复  |  直到 7 年前
        1
  •  3
  •   kennytm    7 年前

    您需要在此时中断您的函数,并添加另一个函数来捕获用户的按钮按下事件。

    你可以使用 Narrative Javascript 为了引入阻塞行为并简化它(所以您不需要将函数分解为两部分),但是请注意,这个库自2013年以来就被放弃了。

        2
  •  3
  •   Hypnus    16 年前

    好吧,也许你想要这样的东西,你可以实现事件来标记Pentium10答案中的键:

    您可以创建一个名为waitforit()的函数,在该函数中设置一个setTimeout()函数,该函数调用相同的方法,直到全局变量为真(由您按按钮操作设置)。

    例如:

    <html>
    <head>
     <script type="text/javascript">
    var buttonpressed = false;
    
    function waitForIt() {
      if (!buttonpressed ) {
      setTimeout(waitForIt,2500);
      } else {
     document.getElementById('info').value='ok';
      }
    }
    
    function startSomething() {
     document.getElementById('info').value='';
     waitForIt();
     document.getElementById('info').value='waiting'; 
    }
    
    function setButtonPressed() {
     buttonpressed = true;
    }
    
    </script>
    </head>
    <body>
    <br>
    <input type='text' style="width: 200px;" id="info" />
    <br>
    <input type='button' style="width: 200px;" value="Start" onclick="javascript: startSomething();">
    <br>
    <br>
    <input type='button' style="width: 200px;" value="Continue" onclick="javascript: setButtonPressed();">
    </body>
    
    </html>
    

    您可以直接调用waitforit()方法,但我创建了它,这样您就可以查看正在发生的事情。 很抱歉示例中的混乱,但我没有足够的时间来空闲:)

        3
  •  0
  •   Jeff Maes    16 年前
    • 您可以隐藏不可见的内容(使用css display:none),并在按下按钮时显示。
    • 或者更安全:您可以在按下按钮时执行服务器/Ajax请求
        4
  •  0
  •   Pentium10    16 年前

    javascript中没有“sleep”或“wait”操作符。但是,您可以设置一个计时器,当计时器过期时,它将执行一个函数。

    setTimeout("alert('hello')",1250);
    

    您必须使用事件来标记密钥:

    <script type="text/javascript">
    
    document.onkeyup = KeyCheck;       
    function KeyCheck()
    
    {
    
       var KeyID = event.keyCode;
    
    
       switch(KeyID)
    
       {
    
          case 16:
    
          document.Form1.KeyName.value = "Shift";
    
          break; 
    
          case 17:
    
          document.Form1.KeyName.value = "Ctrl";
    
          break;
    
          case 18:
    
          document.Form1.KeyName.value = "Alt";
    
          break;
    
          case 19:
    
          document.Form1.KeyName.value = "Pause";
    
          break;
    
          case 37:
    
          document.Form1.KeyName.value = "Arrow Left";
    
          break;
    
          case 38:
    
          document.Form1.KeyName.value = "Arrow Up";
    
          break;
    
          case 39:
    
          document.Form1.KeyName.value = "Arrow Right";
    
          break;
    
          case 40:
    
          document.Form1.KeyName.value = "Arrow Down";
    
          break;
       }
    
    }
    </script>
    
        5
  •  0
  •   Mic    16 年前

    我不会玩超时和间隔。

    你最好把程序分成两个部分,也许就像你在两个函数中建议的那样。
    运行第一部分,添加代码以请求用户执行操作。

    然后根据操作运行第二部分。