2011-01-17 5 views
0

タイトルのように - なぜGoogleマップコードが他のjsスクリプトをブロックしているのですか?私は、ヘッダーに次のコードを持っている:Googleマップコードが他のjsスクリプトをブロックするのはなぜですか?

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

そして今、私はそれがあるため、このコードでそれをしないページ上の別の何かをするjsの他のコードを含めます。私がwindow.onload = startter行をコメントアウトすると、すべて正常に動作します。誰かが私がここで間違っていることを教えてもらえますか?

+1

あなたが他のスクリプトのために再度window.onload関数を使用しようとしていますか? – polarblau

+0

はい、私は他のスクリプトでこれをやっています、なぜですか?それは事実ですか? – Pavel

答えて

1

それは(あなたがこのIDを持つ要素を持っていない)マップキャンバスの最も可能性の高い、あなたはstarter関数内にエラーがないことを確認してください:

document.getElementById("tab14") 

またはあなたのdataオブジェクト:

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

これは設定していません。

EDIT:あなたの質問のコメントに基づいて
、単に、これは動作しません、あなたはonloadメソッドを上書きしているようだ:

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

これだけfunc2メソッドを実行します!

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

idが "tab14"のdivがあり、データオブジェクトが先にロードされています。それはjson形式で座標を保持しています - 私はヘッダーの前に外部リンクとしてロードしています。 – Pavel

+0

ありがとう - この美しいスクリプトは魅力のように動作します! – Pavel

+0

あなたは大歓迎です – ifaour

0

Googleマップでは、ページにアクセスしようとしているiframeに関するいくつかのエラーが発生します。フッターにGoogleコードを移動して、最後のものが読み込まれるようにしてください。

1

window.onloadは、単一の機能エントリポイントです。どのコードセットを最後に設定しても、実行される唯一のコードが定義されます。あなたがする必要があるのは、ドキュメントがロードされたときに実行する関数のキューを設定する(jqueryのような)フレームワークを使用することです(本質的にはready関数は呼び出す関数のリストを設定します)。これを自分で書いてください。ここで

は例です:

function addLoadHandler(func) { 
    var oldEventHandler = window.onload; 
    window.onload = function() { 
     if (oldEventHandler) { 
      oldEventHandler(); 
     } 
     func(); 
    }; 
} 
関連する問題