0

複数のマーカーに対して複数の情報ウィンドウを使用して、一度に 1 つの情報ウィンドウのみを Google マップに表示できますか。

つまり、マーカーをクリックすると他の情報ウィンドウを非表示/閉じて、現在のマーカー情報ウィンドウのみを表示します。

ありがとう。

4

3 に答える 3

5

私がそれを解決した方法は次のとおりです

var infoWindowsOpenCurrently;// A temporarily variable to save currently opened info window
google.maps.event.addListener(marker, 'click', function() {
  typeof infoWindowsOpenCurrently !== 'undefined' && infoWindowsOpenCurrently.close();//if variable is defined close
  infowindow.open(map, marker);
  infoWindowsOpenCurrently = infowindow;//set current info window to temporary variable
});
于 2014-03-04T10:22:20.397 に答える
1

一度に1つのマーカーを表示するときに使用したjavascriptコードは次のとおりです。

ほぼ3時間の検索の後、この方法で複数のマーカーを追加すると、簡単な方法でそれがわかりました

var markerArray=[];

  for (var i = 0; i < markers.length; i++)
            {
                var newMarker = new google.maps.Marker({
                    map: map,
                    position: new google.maps.LatLng(markers[i].Latitude, markers[i].Longitude),
                    title: markers[i].Name + ", "+ markers[i].Address,
                    draggable: false
                });

                var statusStr;
                //Set marker icon depending upon current stage
                switch (markers[i].Stage)
                {
                    //Stage 1 - Brochure
                    case 5: newMarker.setIcon(stage1MarkerImage);
                        statusStr = 'Current Status - <select id="status"> <option id="5" value="Brochure" selected="selected">Brochure</option><option id="6" value="Demo">Demo</option><option id="7" value="Site Visit">Site Visit</option><option id="8" value="Lease Approval">Lease Approval</option></select>';
                        break;
                        //Stage 2 - Demo
                    case 6: newMarker.setIcon(stage2MarkerImage);
                        statusStr = 'Current Status - <select id="status"> <option id="5" value="Brochure" >Brochure</option><option id="6" value="Demo" selected="selected">Demo</option><option id="7" value="Site Visit">Site Visit</option><option id="8" value="Lease Approval">Lease Approval</option></select>';
                        break;
                        //Stage 3 - Site Visit
                    case 7: newMarker.setIcon(stage3MarkerImage);
                        statusStr = 'Current Status - <select id="status"> <option id="5" value="Brochure" >Brochure</option><option id="6" value="Demo" >Demo</option><option id="7" value="Site Visit" selected="selected">Site Visit</option><option id="8" value="Lease Approval">Lease Approval</option></select>';
                        break;
                        //Stage 4 - Lease Approval
                    case 8: newMarker.setIcon(stage4MarkerImage);
                        statusStr = 'Current Status - <select id="status"> <option id="5" value="Brochure" >Brochure</option><option id="6" value="Demo" >Demo</option><option id="7" value="Site Visit" ><Site Visit/option><option id="8" value="Lease Approval" selected="selected">Lease Approval</option></select>';
                        break;
                }



                newMarker["infoWindow"] = new google.maps.InfoWindow({
                    content:
                 '<div class="infoWindow">' +
                '<header>' + markers[i].Name + '</header>' +
                '<div style="clear: both;"></div>' +
                '<div class="content">' +
                '<p>' + markers[i].Address + ', ' + markers[i].City + ', ' + markers[i].State + ', ' + markers[i].CountryName + '</p>' +
                '<p>' +
                 statusStr+
                '<label id="update-status" onclick="updateCustomerStep(this);" data-id="' + markers[i].Id + '" >Update</label>' +
                '</p>' +
                '</div>' +
                '</div>'
                });

                google.maps.event.addListener(newMarker, 'click', function () {

                    for (var i = 0; i < markerArray.length; i++)
                    {
                        var currentMarker = markerArray[i];
                        currentMarker["infoWindow"].close();
                        console.log(currentMarker);
                    }

                    this['infoWindow'].open(map, this);

                });

                markerArray.push(newMarker);
            }
于 2013-07-04T07:16:03.033 に答える
1

私はあなたのコードを少しいじって、これで終わりました:

var markerArray = [];//necessary???

var infoHTML = '<div class="infoWindow"><header></header><div style="clear: both;"></div><div class="content"><p class="address"></p><p>Current Status - <select id="status"> <option value="5">Brochure</option><option value="6">Demo</option><option value="7">Site Visit</option><option value="8">Lease Approval</option></select><label>Update</label></p></div></div>';

//One infoWindow with dynamic content
var infoWindow = new google.maps.InfoWindow({
    content: infoHTML
});

$(infoWindow).find("label").on('click', function() {
    var stage = $(this).prev("select").val();
    var marker = $(this).data('marker')
    marker.data.Stage = stage;
    updateCustomerStep(marker, stage);
});

function openInfoWin() {
    var data = this.data;
    var $infoWindow = $(infoWindow);
    var $select = $infoWindow.find("select").val(data.Stage);
    $infoWindow.find("label").data('marker',this);
    $infoWindow.find("header").text(data.Name);
    $infoWindow.find(".address").text([data.Address, data.City, data.State, data.CountryName].join(', '));
    infoWindow.open(map, this);
}

for (var i = 0; i < markers.length; i++) {
    var data = markers[i];

    newMarker = new google.maps.Marker({
        map: map,
        position: new google.maps.LatLng(data.Latitude, data.Longitude),
        title: data.Name + ", " + data.Address,
        draggable: false
    });

    //Set marker icon depending upon current stage
    switch (data.Stage) {
        case 5: newMarker.setIcon(stage1MarkerImage); break;//Stage 1 - Brochure
        case 6: newMarker.setIcon(stage2MarkerImage); break;//Stage 2 - Demo
        case 7: newMarker.setIcon(stage3MarkerImage); break;//Stage 3 - Site Visit
        case 8: newMarker.setIcon(stage4MarkerImage); break;//Stage 4 - Lease Approval
    }

    newMarker.data = data;
    google.maps.event.addListener(newMarker, 'click', openInfoWin);
    markerArray.push(newMarker);//necessary???
}

ノート:

  • テストされていない
  • ステータス オプションは、id と同じ値を持つようになりました。
  • コード内のどこかで使用されない限り、markerArray は不要になりました。
  • 関数は、updateCustomerStep正式な変数 (マーカー、ステージ) を持つように変更する必要があります。
于 2013-07-06T06:02:29.880 に答える