为什么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>

链接地址: http://www.djcxy.com/p/51597.html

上一篇: Why is setTimeout executing timeExpired with no delay?

下一篇: JavaScript Nested function