gpt4 book ai didi

javascript - 为什么setTimeout执行timeExpired没有延迟?

转载 作者:行者123 更新时间:2023-12-03 10:18:57 27 4
gpt4 key购买 nike

我正在学习 javascript,遇到了一个让我完全难住的问题。当我调用 setTimeout 时,函数参数立即运行,没有延迟。

整体程序(片段)目的:用户输入他们想要设置计时器的分钟数。输入的值被传递给submitName(),它设置计时器并在计时器关闭时调用timeExpired()。

相关 HTML:

<form id="frm1">
Name: <input type="number" id="fname" name="fname"
step="1" min="1" max="1500" value="1"><br>
</form>

<p>How many minutes do you want to set the alarm for?</p>

<button id="submit" onclick="submitName();">Submit</button>

相关Javascript:

<script>


function timeExpired()
{
document.write("Timer off!");
}

function submitName() {
var x = document.getElementById("fname").value;
var num = x*60000;

document.write("<p id='time'>Timer set for: " + x + " minutes.</p>"
+ "<link rel='stylesheet' href='colours.css'/>");

setTimeout(function(){timeExpired();},num);
}

</script>

我尝试过的:

√ 比较 MDN、W3schools 上的示例以及其他有关堆栈溢出的问题,以尝试找到解决方案。

√ 封装在匿名函数中(如上所述)。有或没有匿名函数添加/删除括号()和分号()的许多变体;函数调用时的时间已过期。

√ 使用内置的 Firefox 调试器进行调试(未发现错误)。

√ 检查用户提交的值是否正确分配给x,以及multiple分配给num。

注释:

-我意识到 W3schools 的可疑声誉,并保持警惕。

-我知道 document.write() 会覆盖完全加载的屏幕的内容。我仅在(用户调用的)弹出窗口中以有限的能力使用它。

最佳答案

在没有尝试过的情况下,我认为 document.write()替换整个文档,包括包含 JavaScript 函数的脚本标记。结果,该函数无法再执行。

您能否尝试仅替换正文中脚本标记旁边的元素的内容?例如:

<body>
<div id="content">
<form ...
<button ...
</div>
<script>
...
</script>
</body>

关于javascript - 为什么setTimeout执行timeExpired没有延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29732039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com