2015-10-30 133 views
1

我試圖把谷歌地圖我的標誌,並添加信息窗口中的每個單獨的標記。我得到無法在該行讀的不確定屬性「姓名」後,我點擊標記之一:添加事件偵聽到JavaScript數組

markers[i].name.open(map, marker); 

以下是完整的腳本:

function initMap() { 
    var map = new google.maps.Map(document.getElementById("map"), { 
    zoom: 3, 
    // zoom in on current location if available (not done yet...) 
    center: new google.maps.LatLng(5,5) 
    }); 

    var markers = [ 
    // put all markers in a markers array 
    @foreach ($markers as $marker) 
     new google.maps.Marker({ 
     position: { lat: {{$marker->x}}, lng: {{$marker->y}} }, 
     // infowindow for each marker with its name 
     name: new google.maps.InfoWindow({ 
      content: "{{$marker->name}}" 
     }) 
     }), 
    @endforeach 
    ]; 

    for (var i = 0; i < markers.length; i++) { 
    // add eventlistener for the infowindow we added earlier 
    google.maps.event.addListener(markers[i], 'click', function() { 
     markers[i].name.open(map, marker); 
    }); 
    // add marker to map 
    markers[i].setMap(map); 
    } 
} 

我使用Laravel 5.1使用Blade模板引擎。

+0

邏輯看起來不錯,什麼是ü越來越如果u放的console.log(標記)之前最後的循環?我對刀片和刀片瞭解不多,但我在角度上做了這件事。只要看看如果所有的標記在你移動到下一個循環之前都在數組中 –

+0

@aishwatsingh希望這張圖片可以:http://i.imgur.com/CqCQ6Ff.png。標記顯示在地圖上,因此它們肯定在陣列中。 – Alexander

+0

這就是說,當您在標記上執行點擊功能時,name屬性是未定義的。我會說名稱屬性需要正確的定義。你有沒有在任何地方生活? – mdarmanin

回答

1

此作品(this在點擊監聽器是指google.maps.Marker所單擊):

for (var i = 0; i < markers.length; i++) { 
    // add eventlistener for the infowindow we added earlier 
    google.maps.event.addListener(markers[i], 'click', function() { 
    this.name.open(map, this); 
    }); 
    // add marker to map 
    markers[i].setMap(map); 
} 

proof of concept fiddle

代碼片段:

function initMap() { 
 
    var map = new google.maps.Map(document.getElementById("map"), { 
 
    zoom: 3, 
 
    // zoom in on current location if available (not done yet...) 
 
    center: new google.maps.LatLng(5, 5) 
 
    }); 
 

 
    var markers = [ 
 
    // put all markers in a markers array 
 
    // @foreach ($markers as $marker) 
 
    // New York, NY, USA (40.7127837, -74.00594130000002) 
 
    new google.maps.Marker({ 
 
     position: { 
 
     lat: 40.7127837, 
 
     lng: -74.0059413 
 
     }, 
 
     // infowindow for each marker with its name 
 
     name: new google.maps.InfoWindow({ 
 
     content: "New York, NY, USA" 
 
     }) 
 
    }), 
 
    // Newark, NJ, USA (40.735657, -74.1723667) 
 
    new google.maps.Marker({ 
 
     position: { 
 
     lat: 40.735657, 
 
     lng: -74.1723667 
 
     }, 
 
     // infowindow for each marker with its name 
 
     name: new google.maps.InfoWindow({ 
 
     content: "Newark, NJ, USA" 
 
     }) 
 
    }), 
 
    // Baltimore, MD, USA (39.2903848, -76.61218930000001) 
 
    new google.maps.Marker({ 
 
     position: { 
 
     lat: 39.2903848, 
 
     lng: -76.6121893 
 
     }, 
 
     // infowindow for each marker with its name 
 
     name: new google.maps.InfoWindow({ 
 
     content: "Baltimore, MD, USA" 
 
     }) 
 
    }), 
 
    // @endforeach 
 
    ]; 
 
    var bounds = new google.maps.LatLngBounds(); 
 
    for (var i = 0; i < markers.length; i++) { 
 
    // add eventlistener for the infowindow we added earlier 
 
    google.maps.event.addListener(markers[i], 'click', function() { 
 
     this.name.open(map, this); 
 
    }); 
 
    // add marker to map 
 
    markers[i].setMap(map); 
 
    bounds.extend(markers[i].getPosition()); 
 
    } 
 
    map.fitBounds(bounds); 
 
} 
 
google.maps.event.addDomListener(window, "load", initMap);
html, 
 
body, 
 
#map { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map"></div>

1

試試這個嗎?

for (var i = 0; i < markers.length; i++) { 
      // add eventlistener for the infowindow we added earlier 
      (function(i) { 
       google.maps.event.addListener(markers[i], 'click', function() { 
        //console.log(markers[i]) 
        markers[i].name.open(map, markers[i]); 
       }); 
       // add marker to map 
       markers[i].setMap(map); 
      })(i); 

    } 
+1

你不應該要求upvote或接受。 – mdarmanin

相關問題