<html>
<head>
<script type="text/javascript">
var c
function timedCount(x)
{
document.getElementById('txt').value=x
c=x-1
if(c==0)
{
document.getElementById('txt').value="结束"
}
else
{
setTimeout("timedCount(c)",1000)
}
}
function myprompt()
{ var c=prompt("请输入时间","")
if (c==null || c=="")
{
alert("请正确输入!")
}
else
{
timedCount(c);
}
}
</script>
</head>
<body>
<form>
<input type="button" value="开始计时!" id="txt" onClick="myprompt()">
</form>
</body>
</html>
问题1:为什么倒计时到1时不会显示1直接跳到“结束”
问题2:怎么修改代码,使输入一个或多个空格也会弹出alert
问题3:这段代码,我输入空格会从-1开始计时,然后再点一次按钮再输入一次空格会变成一秒内计时-1,-2;以此类推再输入一次空格,一秒内会计时从-1到-2到-3.我想应该是函数的效果被叠加了,但是为什么会是这种效果?这是一个怎样的叠加过程?
问题4写问题的时候发现切换标签回去时变正常了(-1跳到-3,不会出现-2)
然后又偶然发现这还要看输入的两次空格间的间隙,如果输完第一次空格后,马上再点击按钮输空格,会是问题3的情况,如果第二次输的晚就会是问题4的情况
好吧,只要回答问题1,2就可以了,问题3,4应该不是什么理论概念的问题
首先修改你逻辑上的bug
document.getElementById('txt').value = x;c = x - 1;
if(c == 0){
document.getElementById('txt').value="结束";
}
假如此时x为1,那么会在按钮上显示“1”,没问题,可是紧接着就把x减去1,判断是否为0。这两个步骤连得很紧,所以那个“1”你连看都没看到就变为“结束”了。
其次,输入验证的问题。可以对输入进行类型转换,如果转化结果为“NaN”则说明格式错误,不必纠结于错误的原因是否在于空格。
最后,用全局变量c计时,那么timedCount就不需要形参了,myprompt()函数中也不需要再用var去声明,这样反而给阅读者带来困扰。
好了,给你看我改写的代码,我很耐心吧?
<html><head>
<script type="text/javascript">
var c;
function timedCount() {
if(c == 0) {
document.getElementById('txt').value = "结束";
} else {
document.getElementById('txt').value = c--;
setTimeout("timedCount()", 1000);
}
}
function myprompt() {
c = parseInt(prompt("请输入时间", "").replace(" ", ""));
if(isNaN(c)) {
alert("请正确输入!");
}
else {
timedCount();
}
}
</script>
</head>
<body>
<form>
<input type="button" value="开始计时!" id="txt" onClick="myprompt()">
</form>
</body>
</html>追问
谢谢,很耐心
此题是根据这道题改的:http://www.w3school.com.cn/tiy/t.asp?f=jseg_timing_infinite
prompt那段因为是粘贴过来改了一下所以没注意到声明的问题。(看一下评论)