0

TypeError: document.getElementById(...) is null. No idea why I am getting this error. Works fine in Firebug.

function init() {
updateClock ();
};


function updateClock ( )
{
  var currentTime = new Date ( );
  var currentHours = currentTime.getHours ( );
  var currentMinutes = currentTime.getMinutes ( );
  var currentSeconds = currentTime.getSeconds ( );
  // Pad the minutes and seconds with leading zeros, if required
  currentMinutes = ( currentMinutes < 10 ? "0" : "" ) + currentMinutes;
  currentSeconds = ( currentSeconds < 10 ? "0" : "" ) + currentSeconds;
  // Choose either "AM" or "PM" as appropriate
  var timeOfDay = ( currentHours < 12 ) ? "AM" : "PM";
  // Convert the hours component to 12-hour format if needed
  currentHours = ( currentHours > 12 ) ? currentHours - 12 : currentHours;
  // Convert an hours component of "0" to "12"
  currentHours = ( currentHours == 0 ) ? 12 : currentHours;
  // Compose the string for display
  currentTimeString = currentHours + ":" + currentMinutes + " " + timeOfDay; 
  // Update the time display
  document.getElementById("time").innerHTML = currentTimeString;
}

currentTimeString = "";
window.addEventListener("load", init(), false);

Here is how it is imlemented in the html:

<body>
<p id="time">&nbsp;</p>
</body>
Eric Cochran
  • 8,414
  • 5
  • 50
  • 91

2 Answers2

10
window.addEventListener("load", init(), false);

This line calls init immediately and passes the result to addEventListener (just like any other function call).

You want to pass the function itself, without calling it.

SLaks
  • 868,454
  • 176
  • 1,908
  • 1,964
4

change the line

window.addEventListener("load", init(), false);

to

window.addEventListener("load", init, false);

the reason is that you call the init() function in your original code (and the return value is passed to addEventListener). You need to pass the function init (variable) instead.

sjkm
  • 3,887
  • 2
  • 25
  • 43