Javascript setInterval不使用特定功能
我有一个脚本,可以在浏览器的右上角创建一个带有当前日期和时间的栏。我试图每30秒更新一次,这样它就可以保持实时性,而不仅仅是页面加载的时间。您将看到,我使用set_time()函数onload创建了时间条,然后创建了一个setInterval,用于调用timer(),它通过再次调用set_time()函数来更新时间。计时器显然正在启动,因为每4秒钟我就会收到一个带有“hi”的警报框(来自timer()函数),但当它在这之后调用set_time()时,它就不起作用了。每次启动计时器时,我都会收到一个带有“set time”(位于set_time()函数末尾)的警报,我没有这样做。有人能帮忙吗Javascript setInterval不使用特定功能,javascript,timer,setinterval,Javascript,Timer,Setinterval,我有一个脚本,可以在浏览器的右上角创建一个带有当前日期和时间的栏。我试图每30秒更新一次,这样它就可以保持实时性,而不仅仅是页面加载的时间。您将看到,我使用set_time()函数onload创建了时间条,然后创建了一个setInterval,用于调用timer(),它通过再次调用set_time()函数来更新时间。计时器显然正在启动,因为每4秒钟我就会收到一个带有“hi”的警报框(来自timer()函数),但当它在这之后调用set_time()时,它就不起作用了。每次启动计时器时,我都会收到一
window.onload = function(){
set_time();
window.setInterval(timer, 4000);
};
function timer(){
alert('hi');
set_time();
}
function set_time(){
//create date object to manipulate
var d = new Date();
//current day of the week
var d_names= new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
curr_day = d.getDay();
//current date
var m_names = new Array("January", "February", "March",
"April", "May", "June", "July", "August", "September",
"October", "November", "December");
var curr_date = d.getDate();
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
//current Time
var a_p = "";
var curr_hour = d.getHours();
if (curr_hour < 12)
{
a_p = "a.m.";
}
else
{
a_p = "p.m.";
}
if (curr_hour == 0)
{
curr_hour = 12;
}
if (curr_hour > 12)
{
curr_hour = curr_hour - 12;
}
var curr_min = d.getMinutes();
curr_min = curr_min + "";
if (curr_min.length == 1)
{
curr_min = "0" + curr_min;
}
element = document.getElementById('dateTime');
if(element){
//if dateDiv already exists, update contents
dateDiv.innerHTML = '';
dateDiv.innerHTML = '<p>' + d_names[curr_day] + ', ' + m_names[curr_month] + ' ' + curr_date + ', ' + curr_year + ' | ' + '<strong>' + curr_hour + ':' + curr_min + ' ' + a_p + '</strong>' + '</p>';
}
else{
//else create new dateDiv and append it to DOM body
var dateDiv = document.createElement('div');
dateDiv.innerHTML = '<p>' + d_names[curr_day] + ', ' + m_names[curr_month] + ' ' + curr_date + ', ' + curr_year + ' | ' + '<strong>' + curr_hour + ':' + curr_min + ' ' + a_p + '</strong>' + '</p>';
dateDiv.id = 'dateTime';
document.body.appendChild(dateDiv);
}
alert('set time');
//setTimeout("set_time()", 3000);
}
window.onload=function(){
设置时间();
设置间隔(定时器,4000);
};
函数计时器(){
警报(“hi”);
设置时间();
}
函数集_time(){
//创建要操作的日期对象
var d=新日期();
//一周中的当前日期
var d_name=新数组(“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”、“星期日”);
curr_day=d.getDay();
//当前日期
var m_name=新数组(“一月”、“二月”、“三月”,
“四月”、“五月”、“六月”、“七月”、“八月”、“九月”,
“十月”、“十一月”、“十二月”);
var curr_date=d.getDate();
var curr_month=d.getMonth();
var curr_year=d.getFullYear();
//当前时间
var a_p=“”;
var curr_hour=d.getHours();
如果(当前小时<12)
{
a_p=“a.m.”;
}
其他的
{
a_p=“p.m.”;
}
如果(当前小时==0)
{
当前小时=12;
}
如果(当前小时数>12)
{
当前小时=当前小时-12;
}
var curr_min=d.getMinutes();
curr_min=curr_min+“”;
如果(当前最小长度==1)
{
curr_min=“0”+curr_min;
}
元素=document.getElementById('dateTime');
if(元素){
//如果dateDiv已存在,请更新内容
dateDiv.innerHTML='';
dateDiv.innerHTML=''+d_名称[当前日期]+','+m_名称[当前月份]+'+curr_日期+','+curr_年+'.+'+curr_小时+':'+curr_分钟+'+a_p+'''';
}
否则{
//否则,创建新的dateDiv并将其附加到DOM主体
var dateDiv=document.createElement('div');
dateDiv.innerHTML=''+d_名称[当前日期]+','+m_名称[当前月份]+'+curr_日期+','+curr_年+'.+'+curr_小时+':'+curr_分钟+'+a_p+'''';
dateDiv.id='dateTime';
document.body.appendChild(dateDiv);
}
警报(“设定时间”);
//setTimeout(“set_time()”,3000);
}
您正在将#dateTime
div分配给元素
变量,甚至检查它是否存在,但是当您确认元素
存在时,您使用dateDiv
变量。未定义,并在设置其innerHTML
属性时引发异常;您应该能够在浏览器的错误控制台中看到这一点
请改用此代码:
var element = document.getElementById('dateTime');
if (!element) {
element = document.createElement('div');
document.body.appendChild(element);
}
element.innerHTML = '<p>' + d_names[curr_day] + ', ' + m_names[curr_month] + ' ' + curr_date + ', ' + curr_year + ' | ' + '<strong>' + curr_hour + ':' + curr_min + ' ' + a_p + '</strong>' + '</p>';
var-element=document.getElementById('dateTime');
if(!元素){
element=document.createElement('div');
document.body.appendChild(元素);
}
element.innerHTML=''+d_names[curr_day]+'、'+m_names[curr_month]+'+curr_date+'、'+curr_year+'、'+curr_hour+''+curr_hour+':'+curr_min+'+a_p+'';
如果查看错误控制台,您将看到javascript在此处抛出“dateDiv not defined”错误(就在else
之前):
dateDiv.innerHTML=''代码>
要避免这种情况(并使脚本正常工作),请执行以下操作:
将div层编码到HTML中(不要使用javascript创建),如下所示:
删除末尾的else
块(由于步骤1,它现在是多余的)
将其添加到set_time()的顶部:
var dateDiv=document.getElementById('dateTime')代码>
浏览器控制台中是否有错误?此标题是一个通用条,将应用于多个页面,因此在脚本中动态创建div对我来说是一个更好的选择。但是谢谢,这个解决方案也是可行的