谷歌地图v3事件触发器由json创建的标记

时间:2012-07-11 19:35:00

标签: javascript jquery json google-maps-api-3

我们有一个动态json Feed,在我们的谷歌地图上解析为标记。

解析函数看起来像这样:

function parse_json(json) {

      // alert('start parse: '+json.length);
      if (json.length > 0) { 
        var markers = [];
        for (i=0; i<json.length; i++) {
          var report = json[i];
          //alert(report.longitude +','+report.latitude);
          // addLocation(report); 
          markers[i] = new google.maps.Marker({
            map: map,
            position: new google.maps.LatLng(report.latitude, report.longitude),
            pop_title: report.area1.name,
            pop_body: '<b><a href="/spot/'+ report.spot.slug +'">'+ report.spot.name +'</a></b>'+
                      '<br>'+ report.report_description,
            draggable: false,
            title: 'title',
            zIndex: i,
            icon: '/images/map_icon.png'
          });
          markers[i].metadata = {type: "point", id: report.id};

          google.maps.event.addListener(markers[i], 'click', onMarkerClick);

      }
    };

我已经为创建的标记添加了元数据信息,因此它们的id是report.id - 但我希望使用google.maps.event.trigger(SOMETHING_HERE, 'click');构造在地图外部的按钮时触发给定标记上的单击事件按下。我如何获得对象名称,或者有没有办法使用对象的id?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您将markers数组声明的范围高于parse_json函数,那么您稍后可以参考它,如下所示:

var markers = new Array();
function parse_json(json) {
    //code removed for brevity
}

然后,当您需要找到要触发点击事件的标记时,您可以像这样使用id

for ( var i = 0; i < markers.length; i++ ) {
    var mkr = markers[i];
    if ( mkr.metadata.id === idYouAreSearchingFor ) {
        //do whatever is needed here and fire your event
    }
}