2011-01-17 9 views
0

Genau wie im Titel - warum Google Map Code blockiert meine anderen js Skripte? Ich habe den folgenden Code in der Kopfzeile:Warum Google Map Code blockiert meine anderen js Skripte?

<script type="text/javascript"> 

    /* Sets up the map with markers */ 
    function starter() 
    { 
    var latlng = new google.maps.LatLng(38.60427939057251, -9.07470703125); 

    var myOptions = { 
     zoom: 4, 
     center: latlng, 
     navigationControl: true, 
     scaleControl: false, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map = new google.maps.Map(document.getElementById("tab14"), myOptions); 

     /* Sets up markers */  
     markers = []; 

     infoWindow = new google.maps.InfoWindow();    

     for (var i = 0, coordinates; coordinates = data.coords[i]; i++) 
     {    
        var iconImage = new google.maps.MarkerImage("http://map.lgfl.org.uk/images/arrow_green.png"); 
        var LatLng = new google.maps.LatLng(coordinates.latitude, coordinates.longitude); 
        var marker = new google.maps.Marker({position: LatLng, icon: iconImage }); 

        var contentString = '<div>'+ 
             '<a href='+coordinates.url+'><h4>'+coordinates.title+'</h4></a>'+ 
             '<div>'+ 
             '<p><a href='+coordinates.url+'>'+coordinates.excerpt+'</a></p>'+ 
             '</div>'+ 
             '</div>'; 

        addMarker(marker, contentString); 
        markers.push(marker); 
     } 

     /* Sets up marker clusterer */ 
     var markerCluster = new MarkerClusterer(map, markers); 

     function addMarker(marker, content) 
     { 
     google.maps.event.addListener(marker, 'click', function() { 
         infoWindow.setContent(content); 
         infoWindow.open(map, marker); 
     }); 
     } 

    } 

window.onload = starter; 
</script> 

Und jetzt, wenn ich irgendwelche anderen js Code enthalten sein soll, etwas anderes auf der Seite zu tun, tut sie es nicht, weil dieser Codes. Wenn ich das window.onload = Starterzeile auskommentiere, funktioniert alles gut. Kann mir bitte jemand sagen, was mache ich hier falsch?

+1

Versuchen Sie, die window.onload Funktion wieder für andere Skripte zu benutzen? – polarblau

+0

Ja, ich mache das mit anderen Skripten, warum? Ist das der Fall? – Pavel

Antwort

1

Stellen Sie sicher, dass Sie keine Fehler haben in Ihrem starter Funktion, wahrscheinlich ist es Ihre Karte Leinwand (Sie haben Element nicht mit dieser ID):

document.getElementById("tab14") 

Oder Ihr data Objekt:

for (var i = 0, coordinates; coordinates = data.coords[i]; i++) 

Ich sehe nicht, wo Sie dies einstellen.

EDIT:
Basierend auf Kommentar Ihre Frage ist, so scheint es, dass Sie die onload Methode überschreiben, einfach das funktioniert nicht:

window.onload = func1; 
window.onload = func2; 

Dies würde die func2 Methode nur ausführen!
Versuchen Sie folgendes:

function func1() { 
    alert("This is the first."); 
} 

function func2() { 
    alert("This is the second."); 
} 


function addLoadEvent(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
    window.onload = func; 
    } else { 
    window.onload = function() { 
     if (oldonload) { 
     oldonload(); 
     } 
     func(); 
    } 
    } 
} 

addLoadEvent(func1); 
addLoadEvent(func2); 

addLoadEvent(function() { 
    document.body.style.backgroundColor = '#EFDF95'; 
}) 

SOURCE.

+0

Ich habe div mit ID "tab14" und mein Datenobjekt wird früher geladen. Es enthält die Koordinaten im JSON-Format - ich lade es als externen Link früher in der Kopfzeile. – Pavel

+0

danke - dieses schöne Skript funktioniert wie Charme! – Pavel

+0

Gern geschehen – ifaour

0

Google Maps wirft ein paar Fehler über seinen iframe, der versucht, auf Ihre Seite zuzugreifen. Versuchen Sie, den Google-Code in die Fußzeile zu verschieben, damit die letzte Sache geladen wird.

1

window.onload ist ein einzelner Funktionseinstiegspunkt. Der Code, der zuletzt gesetzt wird, definiert den einzigen Code, der ausgeführt wird. Was Sie tun müssen, ist entweder eine Art von Framework (wie jQuery) zu verwenden, die eine Warteschlange von Funktionen einrichten, die ausgeführt werden, sobald das Dokument geladen ist (die Funktion ready richtet im Wesentlichen eine Liste von Funktionen ein) oder zu schreibe das selbst.

Hier ist ein Beispiel:

function addLoadHandler(func) { 
    var oldEventHandler = window.onload; 
    window.onload = function() { 
     if (oldEventHandler) { 
      oldEventHandler(); 
     } 
     func(); 
    }; 
} 
Verwandte Themen