为什么 setTimeout 执行 timeExpired 没有延迟?
Why is setTimeout executing timeExpired with no delay?
我正在学习 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上的例子,以及其他关于stack overflow的问题,试图找到解决办法。
√ 包裹在匿名函数中(如上)。有和没有匿名函数的许多变体 adding/removing 方括号()和分号();函数调用时已过期。
√ 使用内置的 firefox 调试器进行调试(未发现错误)。
√ 检查用户提交的值是否正确分配给x,多分配给num。
备注:
-我知道 W3schools 的可疑名声,我会保持警惕。
-我知道 document.write() 会覆盖完全加载屏幕的内容。我仅在(用户调用的)弹出窗口中以有限的容量使用它 windows。
虽然没有尝试,但我想 document.write()
会替换整个文档,包括包含您的 JavaScript 函数的脚本标签。结果,该功能无法再执行。
您能否尝试仅替换 body 中脚本标签旁边的元素内容?例如:
<body>
<div id="content">
<form ...
<button ...
</div>
<script>
...
</script>
</body>
我正在学习 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上的例子,以及其他关于stack overflow的问题,试图找到解决办法。
√ 包裹在匿名函数中(如上)。有和没有匿名函数的许多变体 adding/removing 方括号()和分号();函数调用时已过期。
√ 使用内置的 firefox 调试器进行调试(未发现错误)。
√ 检查用户提交的值是否正确分配给x,多分配给num。
备注:
-我知道 W3schools 的可疑名声,我会保持警惕。
-我知道 document.write() 会覆盖完全加载屏幕的内容。我仅在(用户调用的)弹出窗口中以有限的容量使用它 windows。
虽然没有尝试,但我想 document.write()
会替换整个文档,包括包含您的 JavaScript 函数的脚本标签。结果,该功能无法再执行。
您能否尝试仅替换 body 中脚本标签旁边的元素内容?例如:
<body>
<div id="content">
<form ...
<button ...
</div>
<script>
...
</script>
</body>