4

マーカーと情報ウィンドウを含む Google マップを作成しています。各情報ウィンドウに、Google マップを拡大して中央に表示するズーム ボタンと、対応するマーカーを配置したいと考えています。

例については、このjsfiddleを参照してください。情報ウィンドウのコードは比較的単純です。

infoWindowArray[i] = new google.maps.InfoWindow({
    position: latlng,
    content: "<a href='/"+pitches[i].slug+".html'>"+pitches[i].name + " ("+ pitches[i].club+")</a><br /><img width='16' alt='Loupe' src='//upload.wikimedia.org/wikipedia/commons/thumb/4/48/Loupe.svg/32px-Loupe.svg.png'/> <a id='zoom_"+pitches[i].id+"' href='javascript:void(0)'>Zoom In</a>"
});

ただし、私のスクリプトは Chrome では非常に気まぐれで、Firefox では常に失敗します。その理由は、1 回のクリックが何らかの理由で2 回発生するためです。したがって、この関数:

function setupZoomListeners(object, title, google_position, map){
    google.maps.event.addListener(object, 'domready', function() {
        google.maps.event.addDomListener(document.getElementById("zoom_"+title), 'click', function(){ 

            if (document.getElementById("zoom_"+title).innerHTML == "Zoom In"){
                map.setCenter(google_position);
                map.setZoom(14);
                document.getElementById("zoom_"+title).innerHTML = "Zoom out";
            } else {
                map.setCenter(new google.maps.LatLng(53.5, -2.2));
                map.setZoom(6);
                document.getElementById("zoom_"+title).innerHTML = "Zoom In";
            }


        });
}

クリックが 2 回聞こえるためズームインおよびズームアウトしているため、最終的な効果は何もありません。ただし、情報ウィンドウで img タグを削除するだけですべて解決するようです。

img タグが存在すると、スクリプトが 1 回のクリックを 2 回として解釈するという地上的な理由はありますか? あまりにも多くのクリックが登録されているケースを多く見てきましたが、一般的に何が原因でしょうか?

誰でもこれを解決する方法をアドバイスできますか? ありがとう。

4

1 に答える 1

1

あなたのdomreadyイベントを2回キャプチャしています(少なくとも私のバージョンのfirefox 19.0.2では)。zoomListeners関数を次のように開始すると、次のようになります。

function setupZoomListeners(object, title, google_position, map){
    console.log('zoomListener');
    google.maps.event.addListener(object, 'domready', function() {
        console.log('domReady');
        google.maps.event.addDomListener(...

domreadyは、ここで使用するのに適したイベントではないと思います。個人的には、infoWindow オブジェクトを 1 つだけ使用し、マーカーがクリックされたときに別の HTML を入力します。

いずれにせよ、domready は、あなたがやっているように dom のサブセットに使用することを意図していませんでした。マークアップを変更するたびに起動していると思います。そのため、最初の行document.getElementById("zoom_"+title).innerHTML = ...が実行されると、domreadyイベントが再び発生します。

于 2013-03-26T08:00:25.487 に答える