2009-08-04 3 views
1

bin völlig neu in Javascript, aber ich brauche es für die Verwendung googlemaps in meinem Projekt, versuche, Werte für die Breite, Länge und Karte Zoom für jede bestimmte Stadt, so einzustellen Ich erhalte den Namen der Stadt aus einem versteckten Formular und benutze den Schalter, um den Namen der Stadt zu ändern.Javascript: Mit dem Schalter Variablenwerte für die Funktion setzen

cityDiv = document.getElementById('id_city'); 
cityDiv.value = idCity ; 

switch (idCity) 
{ 
case "city1": 
    var map_long = 31.37667; 
    var map_lat = 31.04306; 
    var map_zoom = 3; 
    break 
case "city2": 
    var map_long = 31.33333; 
    var map_lat = 29.85; 
    var map_zoom = 7; 
    break 
default: 
    var map_long = 31.37667; 
    var map_lat = 31.04306; 
    var map_zoom = 3; 
} 

function onLoad() { 
    map = new GMap(document.getElementById("map")); 
    map.addControl(new GSmallMapControl()); 
    map.addControl(new GMapTypeControl()); 
    map.centerAndZoom(new GLatLng(map_lat,map_long) , map_zoom); 

    GEvent.addListener(map, 'click', function(overlay, point) { 
     if (prev_pin) { 
      map.removeOverlay(prev_pin); 
      prev_pin = null; 
     } 
     //var yPoint = new YGeoPoint({{ place.latitude }},{{ place.longitude }}); 

     if (point) { 
      pin = new GMarker(point); 
      map.addOverlay(pin); 
      prev_pin = pin; 

      latDiv = document.getElementById('id_latitude'); 
      lngDiv = document.getElementById('id_longitude'); 
      lngDiv.value = point.x; 
      latDiv.value = point.y; 
     } 
    }); 

} 

Entschuldigung für diese neue Frage.

Mit freundlichen Grüßen.

EDIT von Kommentar von geowa4:?!

Die Frage und das Problem sind die Variablen nie :(gesetzt, so was ist falsch mit meinem Code ich ändern "cityDiv.value = idCity;" auf "var idCity = cityDiv.value, "die nicht so gut funktionieren, aber dieses Mal die Karte

+0

Was ist die Frage? –

+0

Und das Problem ist? –

+0

Die Frage und das Problem sind die Variablen nie gesetzt :(, Also was ist falsch mit meinem Code?! ich ändere "cityDiv.value = idCity; " zu "var idCity = cityDiv.value;" was nicht funktioniert auch, aber diesmal weigert sich die Karte zu laden – Hamza

Antwort

1

Ihr Problem ist Umfang, rein und einfach. Mit var werden Ihre Variablen in den aktuellen lexikalischen Geltungsbereich verschoben, was im Fall von var map_long = 31.37667; et al. Die switch-Anweisung ist. Sobald Sie aus diesem Bereich herausfallen, verschwinden alle in diesem Bereich deklarierten Variablen, sofern keine externe Referenz gepflegt ist. Sie könnten die var-Anweisung entfernen, aber das würde die Variablen global machen. Ich würde empfehlen, Ihre Variablen in einem für Sie sinnvollen Umfang zu deklarieren und sie global nur dann zu machen, wenn dies absolut notwendig ist.

+0

Vielen Dank, das ist wirklich hilfreich, Entschuldigung für die neuen Fragen, die auf einem neuen Wissen beruhen. Danke nochmal . – Hamza

2

Haben Sie laden verweigert versucht, Ihre Werte Dumping, Schreiten durch und Debuggen Alert statements oder console.log() Aussagen, um zu sehen, was die Seite den Wert denkt? davon ist wählen?

Sie könnten auch in Betracht ziehen, ein Objekt, das Sie c ein dann Update:

// Untested, but you should get the gist 
var cityInfo = { 
    map_long : 0.0, 
    map_lat : 0.0, 
    map_zoom : 0 
}; 

switch (idCity) { 
case "city1": 
    cityInfo.map_long = 31.37667; 
    cityInfo.map_lat = 31.04306; 
    cityInfo.map_zoom = 3; 
    break 
case "city2": 
    cityInfo.map_long = 31.33333; 
    cityInfo.map_lat = 29.85; 
    cityInfo.map_zoom = 7; 
    break 
default: 
    cityInfo.map_long = 31.37667; 
    cityInfo.map_lat = 31.04306; 
    cityInfo.map_zoom = 3; 
} 
+0

Dies scheint vernünftiger - ich frage mich, ob diese Variablen, die er im ursprünglichen Beispiel hat, lokal auf die switch-Anweisung beschränkt sind –

+0

hmm ich habe das versucht, aber nicht so gut funktioniert, als Neuling habe ich noch nicht viel JavaScript debuggen lassen, aber jetzt bin ich tu das jetzt. @ Meredith, ich weiß nicht, ob sie locall Y Bereich oder nicht, aber es ist die gleiche wie ich im obigen Beispiel aufgeführt! – Hamza

+0

Nur eine Anmerkung, der obige Code funktioniert nicht, weil die Variable cityInfo falsch deklariert ist. Es ist ein assoziatives Array, also ändern Sie diese Semikolons in Kommas und die Gleichheitszeichen zu Doppelpunkten und Sie sollten alle gesetzt sein. – coderjoe

3

den Code unten Versuchen:

mapInfo = 
{ 
    "city1": 
    { 
    "long": 31.37667, 
    "lat": 31.04306, 
    "zoom": 3 
    }, 
    "city2": 
    { 
    "long": 31.33333, 
    "lat": 29.85, 
    "zoom": 7 
    } 
}; 

function onLoad() { 
    map = new GMap(document.getElementById("map")); 
    map.addControl(new GSmallMapControl()); 
    map.addControl(new GMapTypeControl()); 
    var cityDiv = document.getElementById('id_city'); 
    var idCity = cityDiv.value || "city1"; 
    map.centerAndZoom(new GLatLng(mapInfo[idCity].lat,mapInfo[idCity].long) , mapInfo[idCity].zoom); 

    GEvent.addListener(map, 'click', function(overlay, point) { 
     if (prev_pin) { 
       map.removeOverlay(prev_pin); 
       prev_pin = null; 
     } 
     //var yPoint = new YGeoPoint({{ place.latitude }},{{ place.longitude }}); 

     if (point) { 
       pin = new GMarker(point); 
       map.addOverlay(pin); 
       prev_pin = pin; 

       latDiv = document.getElementById('id_latitude'); 
       lngDiv = document.getElementById('id_longitude'); 
       lngDiv.value = point.x; 
       latDiv.value = point.y; 
     } 
    }); 

} 
+0

Es funktioniert perfekt, vielen Dank, wie ein Neuling und selbstlernender Nerd immer noch versucht herauszufinden, wie, was und warum. ABER Danke SEHR VIEL – Hamza

+0

Wundern diese Fragen zeigt an, dass Sie oder wahrscheinlich ein guter Programmierer sein werden;) Nun, Ihr Code hatte 2 Probleme.Der erste war das Problem mit dem variablen Bereich, das durch die vorherigen Antworten vorgeschlagen wurde. Wenn Sie in JS "var" verwenden, sind die Variablen nur für den aktuellen Codeblock und seine Unterblöcke gültig. Wenn Sie das entfernen, wird die Variable sofort eine Eigenschaft des globalen "Fenster" -Objekts. Und der zweite, nun, ich bin kein Fan von "switch" -Anweisungen, also habe ich nur den Vorteil von JS-Objekten genutzt, die wie assoziative Arrays funktionieren. – BYK

+0

@BYK: Ich analysiere den Code und lese mehr über den Umgang mit Variablen, es ist sehr einfach, aber einige, wie sehr schwierig, ich programmiere in einigen anderen Sprachen, aber irgendwie hasse ich Javascript und nicht gewohnt, damit umzugehen So viel, mit jQuery für kleine Aufgaben und Effekte. Hoffe, dass mir das helfen wird, JS selbst zu lernen. Vielen Dank – Hamza