Veljko89
Veljko89

Reputation: 1953

Php calling javascript on load

Guys i have little problem with PHP to call Javascript function on load ... Idea is when page load i do little calculation with PHP stuff , so when i finish that all i want is to write that down in same DOM element using javascript. I will not show you PHP code for calculation as i am 100% sure it is alright. This is the code i got so far , so can you just tell me whats wrong with it?

$test = 100;
echo "<script language=javascript> window.onload=UpdatePoints($test); </script>";

and Javascript function is simple

function UpdatePoints(Points) {
document.getElementById('PointsNumber').innerHTML = Points;
}

Thanks in advance

Upvotes: 0

Views: 21041

Answers (1)

Michael Berkowski
Michael Berkowski

Reputation: 270599

Instead of calling the function UpdatePoints() in window.onload, you need to wrap the call in a function that gets assigned by reference to window.onload. Otherwise, you are calling the function, and assigning its return value to window.onload.

// This function wraps UpdatePoints($test)
// and is assigned as a reference to window.onload
function load() {
  UpdatePoints(<?php echo $test; ?>);
}
echo "<script type='text/javascript'> window.onload=load; </script>";

Note that the language attribute to the <script> tag is deprecated. Include a type=text/javascript attribute in its place (though text/javascript is genearlly the browser default)

However, since the value of $test is created before the page loads and cannot change when the function is called, you might as well not bother passing it as a parameter, in which case you don't need to wrap the function. Just remove the () to assign it as a reference.

echo "<script type='text/javascript'> window.onload=UpdatePoints; </script>";

function UpdatePoints() {
  // PHP write directly into the function since the value
  // can't change...  It's always going to be passed as what PHP assigns 
  // if you call it as UpdatePoints($test)
  var Points = $test;
  document.getElementById('PointsNumber').innerHTML = Points;
}

Upvotes: 2

Related Questions