0

これで初心者を許してください。ユーザーが地図をクリックすると、マーカーを配置して情報ウィンドウを開く必要があります - 次の例のように: http://www.geocodezip.com/v3_example_click2add_infowindow.html 以下のコードは、マークが交換 - 新しいものが追加されました。どんなアイデアでも本当に、本当に感謝して受け取りました。ありがとうございました。

<script>
    var map = null;
    var markersArray = [];

    function initialize() {
        var latlng = new google.maps.LatLng(0.0000, 0.0000);

        var settings = {
            zoom: 2,
            mapTypeControl:true,
            center: latlng,
            panControl:true,
            zoomControl:true,
            streetViewControl:false,
            overviewMapControl:false,
            rotateControl:true,
            scaleControl: true,
            navigationControl: true,
            navigationControlOptions: {
                style: google.maps.NavigationControlStyle.DEFAULT
            },
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            backgroundColor: 'white'
        };

        map = new google.maps.Map(document.getElementById('map'), settings);

        function placeMarker(location) {
        var marker , i ;
        if ( marker ) {
                marker.setPosition(location);
            } else {
                marker = new google.maps.Marker({
            position: location,
            icon:'http://www.desperatesailors.com/templates/Live/media/mapicons/info.png',
            map: map
            });
            var infowindow = new google.maps.InfoWindow({
                content: 'Latitude: ' + location.lat() +
                    '<br>Longitude: ' + location.lng() +
                    '<br>Only the first four decimal places needed'
            });
            infowindow.open(map,marker);
            }
        }

        google.maps.event.addListener(map, 'click', function(event) {
        placeMarker(event.latLng);
        });
    }

    window.onload = initialize;
</script>
4

2 に答える 2

0

This is a scope issue. You are always delcaring marker in the placeMarker function so if( marker ) will always be false. Move the variable declaration out of that function:

<script>
    var marker;
    var map = null;
    var markersArray = [];

    function initialize() {
        var latlng = new google.maps.LatLng(0.0000, 0.0000);

        var settings = {
            zoom: 2,
            mapTypeControl:true,
            center: latlng,
            panControl:true,
            zoomControl:true,
            streetViewControl:false,
            overviewMapControl:false,
            rotateControl:true,
            scaleControl: true,
            navigationControl: true,
            navigationControlOptions: {
                style: google.maps.NavigationControlStyle.DEFAULT
            },
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            backgroundColor: 'white'
        };

        map = new google.maps.Map(document.getElementById('map'), settings);

        function placeMarker(location) {
        var i ;
        if ( marker ) {
                marker.setPosition(location);
            } else {
                marker = new google.maps.Marker({
            position: location,
            icon:'http://www.desperatesailors.com/templates/Live/media/mapicons/info.png',
            map: map
            });
            var infowindow = new google.maps.InfoWindow({
                content: 'Latitude: ' + location.lat() +
                    '<br>Longitude: ' + location.lng() +
                    '<br>Only the first four decimal places needed'
            });
            infowindow.open(map,marker);
            }
        }

        google.maps.event.addListener(map, 'click', function(event) {
            placeMarker(event.latLng);
        });
    }

    window.onload = initialize;
</script>
于 2013-02-19T17:20:03.623 に答える
0

placeMarker 関数は、ローカル スコープに新しい (空の) マーカー変数を作成します。

function placeMarker(location) {
    var marker , i ;
    if ( marker ) {

常に新しいマーカーが作成されます。次のように変更します。

var marker = null;
function placeMarker(location) {
    if ( marker ) {
于 2013-02-19T17:16:41.663 に答える