Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setInterval不使用特定功能_Javascript_Timer_Setinterval - Fatal编程技术网

Javascript setInterval不使用特定功能

Javascript setInterval不使用特定功能,javascript,timer,setinterval,Javascript,Timer,Setinterval,我有一个脚本,可以在浏览器的右上角创建一个带有当前日期和时间的栏。我试图每30秒更新一次,这样它就可以保持实时性,而不仅仅是页面加载的时间。您将看到,我使用set_time()函数onload创建了时间条,然后创建了一个setInterval,用于调用timer(),它通过再次调用set_time()函数来更新时间。计时器显然正在启动,因为每4秒钟我就会收到一个带有“hi”的警报框(来自timer()函数),但当它在这之后调用set_time()时,它就不起作用了。每次启动计时器时,我都会收到一

我有一个脚本,可以在浏览器的右上角创建一个带有当前日期和时间的栏。我试图每30秒更新一次,这样它就可以保持实时性,而不仅仅是页面加载的时间。您将看到,我使用set_time()函数onload创建了时间条,然后创建了一个setInterval,用于调用timer(),它通过再次调用set_time()函数来更新时间。计时器显然正在启动,因为每4秒钟我就会收到一个带有“hi”的警报框(来自timer()函数),但当它在这之后调用set_time()时,它就不起作用了。每次启动计时器时,我都会收到一个带有“set time”(位于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对我来说是一个更好的选择。但是谢谢,这个解决方案也是可行的