2015-04-19 36 views
0

我正在学习javascript,并且遇到了一个让我完全陷入困境的问题。当我调用setTimeout时,函数参数立即运行,没有任何延迟。为什么setTimeout无延迟执行timeExpired?

整体程序(段)目的:用户输入他们想要设置定时器的分钟数。输入的值传递给一个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> 

Relevnt的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。

注:

-I是知道W3Schools的的可疑名声,和我保持我的眼睛开放。

- 我知道document.write()覆盖了满载屏幕的内容。我只在(用户调用的)弹出窗口中以有限的容量使用它。

+1

它的正常工作http://jsbin.com/likilaxiwe/1/edit?html,js,console,output我可以看到W3Schools的延迟 – mohamedrias

+0

可疑的声誉,洛尔 – Rooster

+0

谢谢,我已经检查了js bin,并在我的系统上显示了js bin中的submitName document.write,但是timeExpired从来没有任何异议。 – csemperor

回答

1

没有试过它,我想document.write()替换整个文档,包括脚本标签,其中包含您的JavaScript函数。作为一种效果,该功能不能再被执行。

您可以尝试只替换正文中包含的元素的内容,脚本标记旁边的内容吗?例如:

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

+0

我刚刚重新尝试了setTimeout中的alert(),结果相同。我会尝试用innerHTML或其他东西替换我的document.write语句,看看它是否有效。 – csemperor

+0

谢谢,ralfstx。这样可行。 – csemperor