2016-04-16 6 views
0
definiert

ich eine Google-Karte Element meiner Seite installiert haben, und ich will es in der Lage sein, um die Lage des Geschäftes zu ändernJavascript: Funktion nicht

Hier ist der HTML-

<div class="mapnav"> 
    <h5>Select a map:</h5> 
    <a href="javascript:;" class="location" onclick="resetMap(21.535176, 39.177557)">Madinah Road Branch</a> 
    <a href="javascript:;" class="location" onclick="resetMap(21.535176, 49.177557)">Prince Sultan St. Branch</a> 
    <a href="javascript:;" class="location" onclick="resetMap(22.535176, 39.177557)">Sharqiya Branch</a> 
</div> 
einen Link auf klicken

und hier ist die Javascript - ich resetMap Funktion innerhalb der ursprünglichen google-map-Funktion auf ein externes Skript

function resetMap(newLatitude, newLongitude){ 
    //reset google map options 
    var map_options = { 
    center: new google.maps.LatLng(newLatitude, newLongitude), 
    zoom: map_zoom, 
    panControl: false, 
    zoomControl: false, 
    mapTypeControl: false, 
    streetViewControl: false, 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
    scrollwheel: false, 
    styles: style, 
    } 
    //reinizialize the map 

    var map = new google.maps.Map(document.getElementById('google-container'), map_options); 

    //add a custom marker to the map    
    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(newLatitude, newLongitude), 
    map: map, 
    visible: true, 
    icon: marker_url, 
    }); 
} 

ich erhalte eine Funktion nicht in der Konsole definiert Fehler definiert haben. Ich habe mich viele Threads angesehen, aber die meisten zum selben Thema sind sehr spezifisch für das individuelle Problem.

+0

aussehen Lesen Sie, was Sie geschrieben haben: "resetMap Funktion innerhalb der ursprünglichen Google-Map-Funktion". Funktionen innerhalb von Funktionen können nicht außerhalb des definierten Bereichs gesehen werden. – PHPglue

Antwort

0

ive definiert eine resetMap Funktion innerhalb der ursprünglichen Google-Map-Funktion

Funktionsdeklarationen wie var scoped sind. Es ist nicht definiert, weil Sie versuchen, im globalen Gültigkeitsbereich darauf zuzugreifen, und es existiert nur innerhalb der anderen Funktion.

Verschieben Sie es, so dass es eine globale ist.

+0

danke für diese Klarstellung –

0

ive definiert eine resetMap Funktion innerhalb der ursprünglichen google map Funktion auf ein externes Skript

Wenn Sie function definiert haben (oder etwas) innerhalb eines function (Google Map-Funktion, wie Sie genannt), wird nicht mehr in globaler Reichweite sein.

Sie entweder

  1. Definieren Sie die Funktion in globalem Bereich (nicht in jeder Funktion/Methode),

2) oder explizit die Methode im Fenster des Oszilloskops gelegt (global scope), indem Sie

window.resetMap = function (newLatitude, newLongitude){ 

es sei denn, die Funktion nicht in globalen Bereich ist, werden Sie nicht in der Lage sein, es über Direkt Event-Handler aufgerufen werden (wie Onclick-Attribut Event-Handler)

Ein anderer Ansatz könnte sein, die Ereignisse über addEventListener zuzuweisen, wo sich die Methode befindet.

Zum Beispiel

function resetMap(newLatitude, newLongitude) 
{ 
//code here 
} 
//Event assignment here 
$(".mapnav a.location").bind("click", function(){ 
    var lat = parseFloat($(this).attr("data-lat")); 
    var long= parseFloat($(this).attr("data-long")); 
    resetMap(lat, long) 
}) 

während Markup wie

<a href="javascript:;" class="location" data-lat="21.535176" data-long="39.177557">Madinah Road Branch</a> 
+0

brilliant, die zweite Option, die Methode in den Windows-Bereich zu setzen, ist genau das, was ich brauchte, da ich Var von der ursprünglichen Funktion verwendet habe, warum ich es innerhalb der Google Map-Funktion verschachtelt, um viele Variablen neu zu definieren –

Verwandte Themen