【问题标题】:how do you do something after a certain time has passed?过了一定时间后你会怎么做?
【发布时间】:2022-01-15 16:28:35
【问题描述】:

我正在尝试在 JS 中发出警报,在其中我获取输入的值并将其乘以 1000 以获得 ms 值和 setTimeout 一个函数,该函数将段落元素更改为 Time Up,即 setTimeout 中的时间是输入 x 1000 的值(因为毫秒) 有点像这样:

function domChanger() {
  document.getElementById("paragraph").innerHTML = "Time Up";
}
function time(alert) {
  alert = document.getElementById("input")
  alert.value *= 1000;
  setTimeout(domChanger(), alert.value)

}

它没有为我做预期的事情(在 alert.value * 1000 设置的时间过去后执行该功能)它立即输出 Time Up。我有什么误解吗?因为我在 Google 上搜索了大约 1 小时,除了 setTimeout 和 setInterval 之外我找不到任何东西。

【问题讨论】:

  • 只需在 setTimeout 调用中删除 domChanger 上的括号,否则不要将函数传递给 setTimeout,而是调用它。

标签: javascript time


【解决方案1】:

问题是

setTimeout(domChanger(), alert.value)

其中domChanger() 立即执行

你需要传递函数引用

 setTimeout(domChanger, alert.value)

演示

function domChanger() {
  document.getElementById("paragraph").innerHTML = "Time Up";
}
function time() {
  var alert = document.getElementById("input")
  alert.value *= 1000;
  setTimeout(domChanger, alert.value)
}
<p id="paragraph"></p>
<input id="input" type="number" step="1" min="1" value="2">
<button type="button" onclick="time()">time</button>

【讨论】:

  • @Keith 对!我已经更新了我的回复。谢谢
  • 回答,但谈到解决方案给了我一个问题:调用函数时如何获得参数(如果需要)
  • @supasiblings setTimeout(domChanger.bind(null, myArgument), alert.value);
【解决方案2】:

您不需要将时间作为参数传递。只需执行以下代码即可。

HTML

<p id="paragraph"></p>
<input type="number" id="input">
<button onclick="time()">Lauch domChanger</button>
<script src="./index.js"></script>

JS

function domChanger() {
  document.getElementById("paragraph").innerHTML = "Time Up";
}

function time() {
  alert = document.getElementById("input");
  alert.value *= 1000;
  setTimeout(domChanger, alert.value);;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多