为什么我的加载处理程序不起作用
Why does my onload handler not work?
此函数应将页面上花费的时间写入div。它工作正常,有一个窗口.onbeforeunload alert..那么为什么这不起作用呢?
<script>
function tempo1() {
var d1 = new Date();
var t_day = d1.getDate();
var t_hour = d1.getHours();
var t_min = d1.getMinutes();
var t_sec = d1.getSeconds();
alert("Started at--> " + t_day + "days, " + t_hour + ":" + t_min + ":" + t_sec);
function tempo2() {
var d2 = new Date();
var t_day2 = d2.getDate();
var t_hour2 = d2.getHours();
var t_min2 = d2.getMinutes();
var t_sec2 = d2.getSeconds();
var day = t_day2 - t_day;
var hour = t_hour2 - t_hour;
var min = t_min2 - t_min;
var sec = t_sec2 - t_sec;
document.getElementById('timespent').innerHTML = "Total--> '+day+'days, '+hour+':'+min+':'+sec";
}
setInterval(tempo2(), 500);
}
window.onload = tempo1();
</script>
<div id="timespent">??days, ??:??:??</div>
作为一个具有良好工作算法的工作轴:
<script>
startTime = new Date();
clockStart = startTime.getTime();
function initStopwatch() {
var NewTime = new Date();
return((NewTime.getTime() - clockStart)/1000);
}
function getSecs() {
var tSecs = Math.round(initStopwatch());
var iSecs = tSecs % 60;
var iMins = Math.round((tSecs-30)/60);
var sSecs ="" + ((iSecs > 9) ? iSecs : "0" + iSecs);
var sMins ="" + ((iMins > 9) ? iMins : "0" + iMins);
document.getElementById('timespent').innerHTML = sMins+":"+sSecs;
window.setTimeout(getSecs,1000);
}
window.onload=getSecs;
</script>
<div id=timespent></div>
在线
window.onload = tempo1();
。您正在调用 tempo1
函数并将其返回值分配给 window
上的 load
事件。它与x = foo();
完全相同,其中调用foo
并将返回值存储在x
中。
你不想要那些()
,你只需要:
window.onload = tempo1;
。它分配函数引用,因此当load
事件发生时将调用它。
正如格雷厄姆指出的那样,你以后也会做同样的事情:
setInterval(tempo2(), 500);
应该是
setInterval(tempo2, 500);
还有第二个错误,在这一行:
document.getElementById('timespent').innerHTML = "Total--> '+day+'days, '+hour+':'+min+':'+sec";
在那里,你用双引号("
(引用字符串,但是当你试图用days
、hour
、min
和sec
变量替换时,你使用的是单引号。您需要在使用哪个引号来开始和结束字符串方面保持一致。任何一个都很好,但你必须选择一个,所以要么全部双打:
document.getElementById('timespent').innerHTML = "Total--> "+day+"days, "+hour+":"+min+":"+sec";
或所有单曲:
document.getElementById('timespent').innerHTML = 'Total--> '+day+'days, '+hour+':'+min+':'+sec';
请注意,您不需要等待load
事件。如果你把你的脚本放在页面的底部(或"timespent"div
下面的任何地方——甚至紧靠它的下方(,你可以直接调用tempo1
。window
对象的load
事件发生在页面加载周期的后期,即加载所有外部资源(包括所有图像(之后。如果这是你想要的,很好,但如果不是,你还有其他选择。
引用:
- 谷歌工程师关于何时可以访问 DOM 元素
- YUI 最佳实践,以加速您的网站
除了上面的答案,你也在直接执行你的第二个函数,而不是把它传递给setInterval
。做
setInterval(tempo2, 500);
相反,这将每 0.5 秒执行一次。
相关文章:
- 回发前所需的字段验证程序不起作用
- Angular.js ajax和应用程序不起作用
- Rails4-启动多个点击事件处理程序不起作用
- touchstart处理程序之后的touchmove处理程序不起作用
- 我的angular应用程序不起作用
- 油脂猴按钮点击处理程序不起作用
- 插入内容后,Iframe 中的单击处理程序不起作用
- 内联点击处理程序不起作用
- 脸书应用程序不起作用
- 委托的事件处理程序不起作用
- 使用 fdb 调试 Adobe AIR JavaScript 应用程序不起作用
- 主干.js事件处理程序不起作用
- 为什么我的 PeerJS 音频聊天应用程序不起作用
- 单击不同 js 文件中定义的事件处理程序和就绪处理程序 - 不起作用
- 邀请朋友尝试脸书应用程序不起作用
- 如果不在 onLoad 函数中,jQuery 事件处理程序不起作用
- 为什么当服务注入第二个控制器时,AngularJS 1.4.8 应用程序不起作用
- 从页面调用时 Jquery 事件处理程序不起作用
- 哨兵程序不起作用
- jQuery on() 单击事件处理程序不起作用