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

时间:2010-02-08 13:27:05

标签: javascript blocking

我需要修改一些旧的JavaScript代码。有一个地方,我想等到用户按下两个按钮之一,然后继续程序流程(如prompt()功能)。如何实现这一目标?

6 个答案:

答案 0 :(得分:3)

您需要在此时断开您的功能,并添加另一个功能来捕捉用户的按钮按下事件。

您可以使用Narrative Javascript来引入阻止行为并简化它(因此您不需要将功能分解为两部分),但请注意,自2013年以来该库已被放弃。

答案 1 :(得分:3)

好的,可能你想要这种东西,你可以实现事件来标记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()方法,但我做了它,这样你就可以查看发生了什么。 对不起这个例子中的混乱,但我没有太多时间可以利用:)

答案 2 :(得分:2)

只需创建一个Promise,并将resolve函数超出其作用域存储在全局变量中。然后,让程序等待承诺解决(使用“异步”和“等待”)。通过调用该全局变量,可在单击按钮时解决承诺。我在国际象棋程序中使用了此技术,等待升级弹出窗口的答案:

var _promote; /* resolve-function reference */

async function promote_piece(pce, fld, clr) {
  var type;
  (...)
  show_mpw(clr); /* show modal promotion window */
  var promise = new Promise((resolve) => { _promote = resolve });
  await promise.then((result) => { type = result });
  if (type === undefined) type = "Q";
  (...)
}

因此,在创建承诺后,程序将等待直到弹出窗口将其解决为止。弹出窗口在关闭后会按以下方式解决诺言:

_promote(type); /* resolve promotion-promise */

请记住,在这种情况下,还必须使用“ await”关键字来调用promote_piece()函数!否则,程序将异步执行并继续执行

答案 3 :(得分:0)

  • 您可以隐藏可能不可见的内容(使用CSS display:none),并在按下按钮时显示。
  • 或更安全:您可以在按下按钮时执行服务器/ AJAX请求

答案 4 :(得分:0)

JavaScript中没有“睡眠”或“等待”运算符。但是,您可以设置计时器,当计时器到期时,它将执行一个函数。

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)

我不会为此超时和间隔。

你最好分两部分切割程序,可能就像你在2个功能中所建议的那样 运行第一部分,添加代码以要求用户采取行动。

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