为什么setTimeout无延迟地执行timeExpired?
我正在学习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和堆栈溢出的其他问题的例子,试图找到解决方案。
√包装在匿名功能(如上)。 添加/删除括号()和分号()的匿名函数的许多变体; timeExpired函数调用。
√使用内置的firefox调试器进行调试(未发现错误)。
√检查用户提交的值是否正确地分配给x,多个分配给num。
笔记:
- 我知道W3school的可疑声誉,并且保持睁大眼睛。
- 我知道document.write()覆盖了满载屏幕的内容。 我只在(用户调用的)弹出窗口中以有限的容量使用它。
没有尝试过,我想document.write()
替换整个文档,包括包含JavaScript函数的脚本标记。 作为一种效果,该功能不能再被执行。
你可以尝试只替换脚本标签旁边的正文中包含的元素的内容吗? 例如:
<body> <div id="content"> <form ... <button ... </div> <script> ... </script> </body>