2

複数のマーカーがあります。

このコードを使用して各マーカーをクリックすると、情報ボックスを正常に開くことができました(はい、マーカー設定のループ内にあります)

for (var i = 0; i < markers.length; i++) {
....
....
....
 google.maps.event.addListener(marker, "click", function () {
            //alert(this.html);
            infowindow.setContent(this.html);
            infowindow.open(map, this);
        });
}

上記のコードは非常にうまく機能します。

しかし今、私は各マーカーのインフォボックスが地図の外でクリックされたボタンで開くことを望みます。私は同じループでこれを試しました。

for (var i = 0; i < markers.length; i++) {
....
....
....
 var chandu = document.getElementById(i);
         google.maps.event.addDomListener(chandu, "click", function(){
            infowindow.setContent(this.html);
            infowindow.open(map, this);
            //alert("Yo");
         });
}

そして私はこのようにクリックするためのhtmlボタンを持っています

    <a href="#" id="0">0</a>
    <a href="#" id="1">1</a>
    <a href="#" id="2">2</a>
    <a href="#" id="3">3</a>
    <a href="#" id="4">4</a>
    <a href="#" id="5">5</a>

しかし、このhtmlリンク部分のクリックは問題になりません

4

2 に答える 2

4

私が今持っている実用的なソリューションは次のようになります

var chandu = document.getElementById(i);
chandu.onclick = generateTriggerCallback(marker,"click");

そして、forループの外に関数があります

function generateTriggerCallback(object, eventType) {
            return function() {
                google.maps.event.trigger(object, eventType);
            };
        }

クレジット:このサンプルのソースコードを調べた後、この回答を思いつきましたhttp://gmaps-samples-v3.googlecode.com/svn/trunk/sidebar/random-markers.html

于 2012-04-20T04:16:09.763 に答える
1

問題は、ハイパーリンクのクリックを処理するコードで「this」を再利用していることです。

var chandu = document.getElementById(i);
         google.maps.event.addDomListener(chandu, "click", function(){
            infowindow.setContent(this.html);
            infowindow.open(map, this);
            //alert("Yo");
         });
}

最初の「this」は正しいです-this.htmlはハイパーリンクのHTMLです(マーカーではありません)。infowindow.open(map、this)の2番目の「this」は正しくありません。作業コードでは、これはマーカーを参照します。動作しないコードでは、これはハイパーリンクを参照します。thisオブジェクトは2行間で変更されません。タグのid値はマーカー配列のインデックスと同じであるため、infowindow.open(map、this)の代わりにinfowindow.open(map、this.id)が必要です。

ただし、これは誤ったHTMLであることに注意してください。ただし、id属性は数字で始めることができないため、文字で始める必要があります。HTM1を検証しようとしても、検証されません。id値には文字の接頭辞(おそらく「m」)が必要です。次に、id値の部分文字列を取得する必要がある場合は、「m」を削除します。

于 2012-04-19T13:39:57.317 に答える