Vraag over globale variabelen in Javascript

Status
Niet open voor verdere reacties.

Floydnl

Nieuwe gebruiker
Lid geworden
6 jul 2009
Berichten
2
Ik ben bezig met het bouwen van een website die gebruik maakt van de Google Maps API.
Ik heb nu het volgende probleem: ik heb in een functie een globale variabele gedefinieerd waarvan de waarde elders in het script opvraagbaar zou moeten zijn.

Het gaat om de volgende code:
Code:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<title>Waar ben ik hier?</title>

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true&amp;key=AIzaSyBAD19kit0JkDqjjcqcpSxuhcs1jxH03vI" type="text/javascript"></script> 
<script type="text/javascript">

function initialize()
{
	// Get the current position with W3C Geolocation API
	navigator.geolocation.getCurrentPosition(getLocation);

    // Pass the latitude and longitude to Google Maps
    function getLocation(pos) 
    {
	   var position = new GLatLng(pos.coords.latitude,pos.coords.longitude);

[COLOR="seagreen"]        lat = pos.coords.latitude;
        lon = pos.coords.longitude;[/COLOR]
        document.getElementById("lati").innerHTML = lat; //latitude value is defining in label element where id is lati
        document.getElementById("longi").innerHTML = lon;              
    }
}
</script>

</head>
<body onload="initialize()" onunload="GUnload()">

<div style="height:320px;width:280px;margin:auto;">
	<p><center><b>Jouw geschatte locatie:</b></p>
    
    [COLOR="red"][B]<script type="text/javascript">
        document.write("<img src='http://maps.google.com/maps/api/staticmap?maptype=hybrid&format=jpg&markers=size:medium|"+lat+","+lon+"&size=298x250&zoom=16&sensor=true' />");
    </script>[/B][/COLOR]
  <center>
  <b>Lat: <label id="lati"></label> - Lon: <label id="longi"></label></b><br /><br />
  [COLOR="blue"]<input type="submit" onclick="window.location='vervolg.php?lat='+lat+'&lon='+lon;" value="Locatie opslaan"/>[/COLOR]
  <p></p>
  <input type="submit" onclick="window.location='test.php';" value="Locatie opnieuw opvragen"/>
  
</center>
</body> 
</html>

Zoals je kunt zien wordt in de functie getLocation(pos) een tweetal variabelen lat en lon (groene deel) aangemaakt.

Het rare is nu dat deze variabele in de voorlaatste <input type="submit"... /> (het blauwe deel van de code) op de juiste manier wordt afgevangen (lees: de juiste waarde krijgt), maar is dat in het rode gedeelte niet het geval. In dat gedeelte wordt er geen waarde aan de variabelen lat en lon toegekend.

Kies ik er voor om deze variabelen buiten de functies vooraf een waarde toe kennen, dan wordt deze waarde aan de rode lat en lon toegekend.

Waar het nu om gaat is dat ik niet begrijp waarom het ene deel javascript de in de functie (groene gedeelte) wel goed overneemt, maar dat dat voor het andere niet geldt.

Ik hoop dat ik een beetje duidelijk ben. Zo niet, dan verneem ik dat wel. :o
 
Op het moment dat je rode script geladen wordt is de functie initialise nog niet aangeroepen, dat gebeurt pas als de gehele pagina geladen is, vanwege onload="initialize()". Wat je, denk ik, het beste kunt doen is dat rode script vervangen door een lege div, die je vanuit het eerste script invult. Het resultaat wordt dan zoiets. Overigens is de <center> tag al jaren geleden verouderd verklaard, die hoor je niet meer te gebruiken. (het is echt verbazend hoe vaak dat op dit forum gezegd moet worden, waar leert iedereen nog dat ding te gebruiken?)
Code:
<!DOCTYPE html>
<html>
<head>
<title>testpagina</title>

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true&amp;key=AIzaSyBAD19kit0JkDqjjcqcpSxuhcs1jxH03vI" type="text/javascript"></script> 
<script type="text/javascript">

function initialize()
{
	// Get the current position with W3C Geolocation API
	navigator.geolocation.getCurrentPosition(getLocation);

    // Pass the latitude and longitude to Google Maps
    function getLocation(pos) 
    {
	   var position = new GLatLng(pos.coords.latitude,pos.coords.longitude);

        lat = pos.coords.latitude;
        lon = pos.coords.longitude;
        document.getElementById("lati").innerHTML = lat; //latitude value is defining in label element where id is lati
        document.getElementById("longi").innerHTML = lon;              
[COLOR="seagreen"]kaart = document.getElementById("kaart")
kaart.innerHTML = '"<img src=http://maps.google.com/maps/api/staticmap?maptype=hybrid&format=jpg&markers=size:medium|'+lat+','+lon+'&size=298x250&zoom=16&sensor=true />"';[/COLOR]
    }
}

</script>

</head>
<body onload="initialize()" onunload="GUnload()">

<div style="height:320px;width:280px;margin:auto;">
	<p><center><b>Jouw geschatte locatie:</b></p>
    
    [COLOR="seagreen"]<div id="kaart"></div>[/COLOR]
    
  <center>
  <b>Lat: <label id="lati"></label> - Lon: <label id="longi"></label></b><br /><br />
  <input type="submit" onclick="window.location='vervolg.php?lat='+lat+'&lon='+lon;" value="Locatie opslaan"/>
  <p></p>
  <input type="submit" onclick="window.location='test.php';" value="Locatie opnieuw opvragen"/>
  
</center>
</body> 
</html>
 
Laatst bewerkt:
Ik heb je tip getest, en inderdaad: dat is de oplossing. Heel erg bedankt voor je reactie! :thumb:

En, ik heb de <center>s weggehaald ... :)
 
geen dank, mooi dat het werkte, vergeet niet de vraag op 'opgelost' te zetten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan