Reputation: 103
Having issue with onload event, its not starting the Javascript on page.
I have tried using following code: onload="startTime()"
and document.getElementById("clockdate").onload = function() {startTime()};
function startTime() {
var today = new Date();
var hr = today.getHours();
var min = today.getMinutes();
var sec = today.getSeconds();
ap = (hr < 12) ? "<span>AM</span>" : "<span>PM</span>";
hr = (hr == 0) ? 12 : hr;
hr = (hr > 12) ? hr - 12 : hr;
//Add a zero in front of numbers<10
hr = checkTime(hr);
min = checkTime(min);
sec = checkTime(sec);
document.getElementById("clock").innerHTML = hr + ":" + min + ":" + sec + " " + ap;
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var curWeekDay = days[today.getDay()];
var curDay = today.getDate();
var curMonth = months[today.getMonth()];
var curYear = today.getFullYear();
var date = curWeekDay + ", " + curMonth + " " + curDay + " " + curYear;
document.getElementById("date").innerHTML = date;
var time = setTimeout(function() {
startTime()
}, 500);
}
function checkTime(i) {
if (i < 10) {
i = "0" + i;
}
return i;
}
<div id="clockdate" onload="startTime()">
<div id="clock"></div>
<div id="date"></div>
</div>
Trying to show the current time and date.
Upvotes: 0
Views: 221
Reputation: 20039
onload
doesnt works with div
. Try
document.body.onload = startTime;
Shorter version
function startTime() {
var today = new Date();
document.getElementById('date').innerHTML = today.toLocaleDateString('en-US', {
weekday: 'short',
year: 'numeric',
month: 'long',
day: 'numeric'
});
document.getElementById('clock').innerHTML = today.toLocaleTimeString('en-US')
var time = setTimeout(startTime, 1000);
}
document.body.onload = startTime;
<div id="clockdate">
<div id="clock"></div>
<div id="date"></div>
</div>
Upvotes: 1
Reputation: 236
function startTime() {
var today = new Date();
var hr = today.getHours();
var min = today.getMinutes();
var sec = today.getSeconds();
ap = (hr < 12) ? "<span>AM</span>" : "<span>PM</span>";
hr = (hr == 0) ? 12 : hr;
hr = (hr > 12) ? hr - 12 : hr;
//Add a zero in front of numbers<10
hr = checkTime(hr);
min = checkTime(min);
sec = checkTime(sec);
document.getElementById("clock").innerHTML = hr + ":" + min + ":" + sec + " " + ap;
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var curWeekDay = days[today.getDay()];
var curDay = today.getDate();
var curMonth = months[today.getMonth()];
var curYear = today.getFullYear();
var date = curWeekDay + ", " + curMonth + " " + curDay + " " + curYear;
document.getElementById("date").innerHTML = date;
var time = setTimeout(function() {
startTime()
}, 500);
}
function checkTime(i) {
if (i < 10) {
i = "0" + i;
}
return i;
}
<body onload="startTime()">
<div id="clockdate">
<div id="clock"></div>
<div id="date"></div>
</div>
</body>
You have done everything right (just you have to start the function of body <body onload="startTime()">
Upvotes: 0
Reputation: 528
Your data Function is ok slightly. but calling point of functions is wrong try to do what i did.
function startTime() {
var today = new Date();
var hr = today.getHours();
var min = today.getMinutes();
var sec = today.getSeconds();
ap = (hr < 12) ? "<span>AM</span>" : "<span>PM</span>";
hr = (hr == 0) ? 12 : hr;
hr = (hr > 12) ? hr - 12 : hr;
//Add a zero in front of numbers<10
hr = checkTime(hr);
min = checkTime(min);
sec = checkTime(sec);
document.getElementById("clock").innerHTML = hr + ":" + min + ":" + sec + " " + ap;
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var curWeekDay = days[today.getDay()];
var curDay = today.getDate();
var curMonth = months[today.getMonth()];
var curYear = today.getFullYear();
var date = curWeekDay + ", " + curMonth + " " + curDay + " " + curYear;
document.getElementById("date").innerHTML = date;
var time = setTimeout(function() {
startTime()
}, 500);
}
function checkTime(i) {
if (i < 10) {
i = "0" + i;
}
return i;
}
<html>
<head></head>
<body onload="startTime()">
<div id="clockdate">
<div id="clock"></div>
<div id="date"></div>
</div>
</body>
</html>
Upvotes: 0
Reputation: 1524
onload
does not run on div elements: https://www.w3schools.com/jsref/event_onload.asp
You need to set it on <body>
Then, once you get it running, do mind the quality of your code: from a helicopter view, I see a globalscope ap
variable; also, there is no reason to create an endless chain of closures by recursively calling setTimeout
; you can achieve the same effect with an external setInterval
call... If you use setTimeout
, at least get rid of the useless closure and call setTimeout(startTime,500)
directly.
Upvotes: 1