4 Stimmen

Javascript : Verwenden von Switch, um Variablenwerte für die Funktion festzulegen

Bin völlig neu in Javascript, aber ich brauche es für die Verwendung von googlemaps in meinem Projekt, versuche ich, Werte für die Breite, Länge und Karte Zoom für jede bestimmte Stadt zu setzen, so bin immer den Namen der Stadt von einem versteckten Formular-Eingang und mit Switch zu wechseln in Bezug auf den Namen der Stadt.

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 Anfängerfrage.

Mit freundlichen Grüßen .

EDIT von Kommentar von geowa4:

Die Frage und das Problem sind die Variablen nie gesetzt :( , so was falsch mit meinem Code?! Ich ändere "cityDiv.value = idCity ; " zu " var idCity = cityDiv.value ; ", die nicht so gut funktioniert hat, aber dieses Mal die Karte weigert sich zu laden

0 Stimmen

Die Frage und das Problem sind die Variablen nie gesetzt :( , so was falsch mit meinem Code?! Ich ändere "cityDiv.value = idCity ; " zu " var idCity = cityDiv.value ; ", die nicht so gut funktioniert hat, aber dieses Mal die Karte weigert sich zu laden

0 Stimmen

P.s: bin total JS-Neuling :(

0 Stimmen

Ich habe die Frage (aus Ihrem Kommentar) in die Frage gestellt, da sie dort hingehört. Bearbeiten Sie sie weiter, wenn Sie möchten.

3voto

Haben Sie versucht, Ihre Werte zu speichern, durchzugehen und zu debuggen? Alert-Anweisungen o console.log() Anweisungen, um zu sehen, was die Seite denkt, dass der Wert dieses Selects ist?

Sie könnten auch erwägen, ein Objekt zu erstellen, das Sie dann aktualisieren können:

// 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 Stimmen

Dies scheint vernünftiger - ich frage mich, ob die Variablen, die er im ursprünglichen Beispiel hat, lokal auf die switch-Anweisung skaliert sind.

0 Stimmen

Hmm ich habe das versucht, aber es hat nicht so gut funktioniert, als Neuling habe ich noch nicht viel Javascript debuggt, aber jetzt mache ich das jetzt. @Meredith, ich weiß nicht, ob sie lokal scoped oder nicht, aber es ist das gleiche, wie ich in dem Beispiel oben aufgeführt!

0 Stimmen

Nur ein Hinweis: Der obige Code funktioniert nicht, weil die Variable cityInfo falsch deklariert ist. Es handelt sich um ein assoziatives Array, also ändern Sie die Semikolons in Kommas und die Gleichheitszeichen in Doppelpunkte, dann sollte alles klappen.

3voto

BYK Punkte 1350

Probieren Sie den folgenden Code aus:

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 Stimmen

Its Working perfectly, Thank you very much, as a newbie and self-educational nerd am still trying to figure out How, What, and Why. ABER VIELEN DANK!

0 Stimmen

Wenn Sie sich diese Fragen stellen, zeigt das, dass Sie ein guter Programmierer sind oder wahrscheinlich werden ;) Nun, Ihr Code hatte 2 Probleme. Das erste war das Problem mit dem Geltungsbereich der Variablen, das in den vorherigen Antworten angedeutet wurde. Wenn Sie "var" in JS verwenden, sind Ihre Variablen nur für den aktuellen Codeblock und seine Unterblöcke gültig. Wenn man das aufhebt, wird die Variable sofort zu einer Eigenschaft des globalen "window"-Objekts. Und das zweite, nun, ich bin kein Fan von "switch"-Anweisungen, also habe ich einfach den Vorteil von JS-Objekten genutzt, die wie assoziative Arrays funktionieren.

0 Stimmen

@BYK: Ich analysiere den Code und lesen Sie mehr darüber, wie man mit Variablen umgehen, seine sehr einfach, aber einige, wie sehr knifflig, ich tun Programmierung in einigen anderen Sprachen, aber irgendwie habe ich Hate javascript und nicht verwendet, um mit ihm umgehen, dass viel, mit jQuery für kleine Aufgaben und Effekte. Ich hoffe das hilft mir beim Selbststudium von JS. Dankeschön

2voto

geowa4 Punkte 38662

Ihr Problem ist schlicht und einfach der Umfang. Verwendung von var Ihre Variablen in den aktuellen lexikalischen Bereich ein, der im Fall von var map_long = 31.37667; et al ist die Switch-Anweisung. Sobald Sie aus diesem Bereich herausfallen, verschwinden alle in diesem Bereich deklarierten Variablen, es sei denn, ein externer Verweis wird beibehalten. Sie könnten die var Anweisung, aber das würde die Variablen global machen. Ich würde empfehlen, Ihre Variablen in einem Bereich zu deklarieren, der für Sie sinnvoll ist, und sie nur dann global zu machen, wenn es absolut notwendig ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X