JS倒计时 使用setInterval调用对象自身方法报 Maximum call stack size exceeded问题

问题描述

使用JavaScript写的倒计时,使用setInterval调用对象自身方法报 Maximum call stack size exceeded问题<!doctype html><html><head><meta charset='utf-8'/><title>Title</title><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script></head><body><div id='m1'><span><b>0</b><b>0</b></span> <span><b>0</b><b>0</b></span> <span><b>0</b><b>0</b></span></div><div id='m2'><span><b>0</b><b>0</b></span> <span><b>0</b><b>0</b></span> <span><b>0</b><b>0</b></span></div><script>function CounterDown(id,endtime){this.id=id;this.endtime=new Date(endtime).getTime();this._countTime();}CounterDown.prototype={_countTime:function(){var timmer;var now =new Date().getTime(); now = now+1000;var teamTimeId = this.id,endtime = this.endtime,lasttime = (parseInt(endtime)-parseInt(now)) / 1000,days = Math.floor(lasttime / (24 * 3600)),lastSec = (lasttime - days * 24 * 3600),hours = Math.floor(lastSec/3600),minutes = Math.floor((lastSec - hours * 3600)/60),seconds = Math.floor(lastSec - (hours * 3600) - (minutes * 60));if(lasttime <= 0){clearInterval(timmer);$('#'+teamTimeId).html("<span><b>0</b><b>0</b></span>天<span><b>0</b><b>0</b></span>时<span><b>0</b><b>0</b></span>分<span><b>0</b><b>0</b></span>秒");}else{day_0=parseInt(days/10);day_1=parseInt(days%10);hours_0=parseInt(hours/10);hours_1=parseInt(hours%10);minutes_0=parseInt(minutes/10);minutes_1=parseInt(minutes%10);seconds_0=parseInt(seconds/10);seconds_1=parseInt(seconds%10);var timerhtml = "";timerhtml += "<span><b>" + day_0+"</b><b>"+day_1 + "</b></span>天";timerhtml += "<span><b>" + hours_0+"</b><b>"+hours_1 + "</b></span>时";timerhtml += "<span><b>" + minutes_0+"</b><b>"+minutes_1 + "</b></span>分";timerhtml += "<span><b>" + seconds_0+"</b><b>"+seconds_1 + "</b></span>秒";$('#'+teamTimeId).html(timerhtml);}timmer=setInterval(this._countTime,1000);}};new CounterDown('m1',"2014/01/01 10:10:10");</script></body></html>在浏览器控制台报如下错误:请JavaScript高手看看是怎么回事,要怎么解决才好,谢谢!

解决方案

<!doctype html><html><head><meta charset='utf-8'/><title>Title</title><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script></head><body><div id='m1'><span><b>0</b><b>0</b></span> <span><b>0</b><b>0</b></span> <span><b>0</b><b>0</b></span></div><div id='m2'><span><b>0</b><b>0</b></span> <span><b>0</b><b>0</b></span> <span><b>0</b><b>0</b></span></div><script>function CounterDown(id,endtime){this.id=id;this.endtime=new Date(endtime).getTime();this._countTime();}CounterDown.prototype={_countTime:function(){var timmer;var now =new Date().getTime(); //now = now+1000;var teamTimeId = this.id,endtime = this.endtime,lasttime = (parseInt(endtime)-parseInt(now)) / 1000,days = Math.floor(lasttime / (24 * 3600)),lastSec = (lasttime - days * 24 * 3600),hours = Math.floor(lastSec/3600),minutes = Math.floor((lastSec - hours * 3600)/60),seconds = Math.floor(lastSec - (hours * 3600) - (minutes * 60));if(lasttime <= 0){clearTimeout(timmer);$('#'+teamTimeId).html("<span><b>0</b><b>0</b></span>天<span><b>0</b><b>0</b></span>时<span><b>0</b><b>0</b></span>分<span><b>0</b><b>0</b></span>秒");}else{day_0=parseInt(days/10);day_1=parseInt(days%10);hours_0=parseInt(hours/10);hours_1=parseInt(hours%10);minutes_0=parseInt(minutes/10);minutes_1=parseInt(minutes%10);seconds_0=parseInt(seconds/10);seconds_1=parseInt(seconds%10);var timerhtml = "";timerhtml += "<span><b>" + day_0+"</b><b>"+day_1 + "</b></span>天";timerhtml += "<span><b>" + hours_0+"</b><b>"+hours_1 + "</b></span>时";timerhtml += "<span><b>" + minutes_0+"</b><b>"+minutes_1 + "</b></span>分";timerhtml += "<span><b>" + seconds_0+"</b><b>"+seconds_1 + "</b></span>秒";$('#'+teamTimeId).html(timerhtml);}var that = this;var timmer = setTimeout(function() { that._countTime();}, 500);}};new CounterDown('m1',"2014/01/01 10:10:10");</script></body></html>
解决方案二:
死循环了 最后一个地使用如下代码解决死循环setTimeout(function() { timmer=setInterval(this._countTime,1000); }, 0)

时间: 2024-08-01 17:59:41

JS倒计时 使用setInterval调用对象自身方法报 Maximum call stack size exceeded问题的相关文章

数据库反向生成的项目调用findByProerty方法报错

问题描述 利用数据库反向生成的项目,调用findByProerty(StringpropertyName,....)方法报错,搞了一个下午了,实在不知道怎么解决了,错误代码如下:Exceptioninthread"main"javax.ejb.EJBException:EJBException:;nestedexceptionis:<openjpa-1.1.1-SNAPSHOT-r422266:891341nonfatalusererror>org.apache.openj

js倒计时简单实现代码_javascript技巧

倒计时:  1.设置一个有效的结束日期  2.计算剩余时间  3.将时间转换成可用的格式  4.输出时钟数据作为一个可重用的对象  5.在页面上显示时钟,并在它到达0时停止 html <div id="clock"> <span id="days"></span>天 <span id="hours"></span>时 <span id="minutes">

js setTimeout 和 setInterval 的区别

 js setTimeout 和 setInterval 的区别,js setinterval   js settimeout   setinterval   window.setinterval   flash setinterval setinterval 参数   清除setinterval   asp setinterval   as setinterval   setinterval 停止 先看看例子看讲解一下.例如: tttt=setTimeout('northsnow()',100

js倒计时简单实现方法_javascript技巧

本文实例讲述了js倒计时简单实现方法的代码,分享给大家供大家参考,具体如下: function timeDown(second) { var month = '', day = '', hour = '', minute = ''; if (second >= 86400 * 30) { month = Math.floor(second / (86400 * 30)) + '月'; second = second % (86400 * 30); } if (second >= 86400)

① 在对象被垃圾回收器回收的时候,析构函数被GC自动调用 ②当对象即将离开作用域时,系统自动调用对象的的析构函数

问题描述 资料上说:①当对象即将离开作用域时,系统自动调用对象的的析构函数②在对象被垃圾回收器回收的时候,析构函数被GC自动调用-----------------------------------------------所以我就迷惑:当对象即将离开作用域时,即使垃圾回收器没有回收,系统也会自动调用对象的的析构函数吗?还是垃圾回收器与析构函数是"捆绑"在一起的?(即析构函数只有在垃圾回收器回收时才会被调用,其他任何情况析构函数都不会被调用,析构函数被系统调用说明垃圾回收器在执行回收工作

stringbuilder-Java Stringbuilder调用append()方法报错

问题描述 Java Stringbuilder调用append()方法报错 报错: The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class 知道了 顺便说一句 回答问题就好好回答 不愿回答就不用回答 即使别人问的问题在弱智或者啥的 也不用嘲笑别人吧....... 解决方案 先贴代码,在贴错误,肯定是代码语法有问题并且是简单问题,这个错是编译器提示的.看

Js代码顺序问题,JS异常:报缺少对象

问题描述 Js代码顺序问题,JS异常:报缺少对象 大家好,有一个JS问题,代码以上线,突然有一天下午,JS异常:报缺少对象 代码如下: 1,有一个父页面JSP里有Iframe,Iframe里调用另一个公司界面,这个界面有一个提交按钮,点击提交后回调我一个Action的方法 2,这个方法回调中间界面如下: <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

JS倒计时代码汇总_javascript技巧

本文实例总结了常见的JS倒计时代码.分享给大家供大家参考.具体汇总如下: 第一种:精确到秒的javascript倒计时代码  HTML代码:  复制代码 代码如下: <form name="form1">  <div align="center" align="center">  <center>离2010年还有:<br>  <input type="textarea" n

javascript-请问如何调用对象中的函数

问题描述 请问如何调用对象中的函数 这里有个集合,请问集合里面可以有函数吗?像下面这样 html: <input id="name" value=""> jsp: aa = { change:function() { $("#name").value = '已发送'; } } 请问可以这样写吗?如果这样写是对的,那么请问该如何调用这个函数呢?当我用aa.change()或者aa.change的时候,查看错误信息是"undef