0

Google Maps API 3 を初めて使用するので、次のエラーを理解できません。マーカーをすべてクリックすると、同じマーカー (悪い) の情報ウィンドウが開きますが、テキストが異なります (良い)。wordpress カスタム メタ データからデータを xml に引き出して、それを解析します。疑問に思うのは、マーカーの生成はこのように機能するが、情報ウィンドウのリスナーの追加は明らかに失敗するという事実です。

ここで何が起こっているのか、何か考えはありますか?

ライブ デモ: http://goo.gl/9seK9

コード

$(document).ready(function(){

    var infowindow;
    var latlng = new google.maps.LatLng(47.580231,13.771362);
    var settings = {
        zoom: 8,
        center: latlng,
        panControl: true,
        zoomControl: true,
        mapTypeControl: true,
        disableDefaultUI:true,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), settings);


    jQuery.get("http://rundumadum.eu/de/wp-content/themes/rud/rundumadumMap.xml", {}, function(data) {
        var xmllength = $(data).find("mymarkers").children().size();
        var supermarkers = [];

        jQuery(data).find("mymarker").each(function() {
                var myid = $(this).find("id").text();
                var mytitle = $(this).find("title").text();
                var mylink = $(this).find("link").text();
                var mylocation = $(this).find("location").text();

                var mysplits = mylocation.split(",");
                var mylat = mysplits[0];
                var mylng = mysplits[1];
                var mylatlng = new google.maps.LatLng(parseFloat(mylat), parseFloat(mylng));  
                var myinfo = "<a href="+mylink+">"+mytitle+"</a>";
                var marker = createMyMarker(mytitle, myinfo, mylink, mylatlng);
        });
    });


    function createMyMarker(mytitle, myinfo, mylink, mylatlng) {
        marker = new google.maps.Marker({
            position: mylatlng, 
            map: map,
            clickable:true,
            icon:'http://rundumadum.eu/de/wp-content/themes/rud/static/img/markerTest.png',
            html: '<a href="'+mylink+'">'+mytitle+'</a>'
        });

        google.maps.event.addListener(marker, "click", function() {
            if (infowindow) infowindow.close();
            infowindow = new google.maps.InfoWindow({content: myinfo});
            infowindow.open(map, marker);
        });
    }
    return marker;

});

どんなアイデアにも感謝します...

4

1 に答える 1

0

私が気づいたことの 1 つは、markerあなたが作成してcreateMyMarkerいる が using で宣言されていないことです。そのため、誤ってグローバル参照var markerを作成しているように見えます。markerまた、ステートメント:return markerは実際にはcreateMyMarker関数の終了後にあるように見えますが、質問でコードサンプルを設定したときに導入されたタイプミスである可能性があります。

createMyMarkerいずれにせよ、その関数内で使用してマーカーを宣言するようにコードを変更するvar markerと、より良い結果が得られると思います。

于 2012-07-11T13:07:43.293 に答える