的.js
<script type="text/javascript">
var c={{ rest_time }}
var t
function timedCount()
{
if(c>-1){
$('#txt').html(c)
c=c-1
t=setTimeout("timedCount()",1000) //1000ms后,执行参数1(调用自身)
}
else{
$('#txt').html("time's up")
}
}
$(document).ready(timedCount())
</script>
django view
def show_reply_page(request, topic_id):
t = topic.objects.get(id=topic_id)
comments = t.comment_set.filter(deleted=False)
posts = t.post_set.filter(deleted=False)
past_time = int(time.time() - t.locktime)
rest_time = 300 - past_time
t.save()
return render_to_response('forum/reply.html', {'conf': conf, 'title': t.title,
'request': request,
'topic': t,
'posts': posts,
'comments': comments,
'past_time': past_time,
'rest_time' : rest_time,
},
context_instance=RequestContext(request))
当我点击按钮时,django视图会给javascript一个{{rest_time}}。然后它将进行倒计时(每秒timedCount()调用自己)。但是当我再次点击它时,倒计时的速度会累积起来。这意味着当我点击它十次时,它每秒计算10秒。如何解决这个问题?
答案 0 :(得分:1)
两个选项:
选项1:
在函数开头设置全局值。例如window.counterStarted
。
但即使在设置该值之前,请检查是否已设置该全局值。如果是这样,那就不要再开始了。
if(typeof window.counterStarted !== undefined){
return false;
}
window.counterStarted = true;
选项2:
将setTimeout
定义为全局值,例如window.myTimeout
,而不是函数中的局部变量t
。然后在新的启动之前清除先前的超时,在函数的开头使用以下内容:
if(typeof window.myTimeout !== undefined){
clearTimeout(window.myTimeout);
}