2013-04-29 44 views
2

我在这里的问题是,功能google.maps.event.addListener(marker, 'click', (function()的作品,然后我点击第一个标记。点击所有其他标记不起作用。我希望这个函数能够处理所有的标记。这里有什么问题?功能只适用于1标记

var marker, i; 

for (i = 0; i < locations.length; i++) { 
    marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
     map: map, 
    }); 

    google.maps.event.addListener(marker, 'click', (function (marker, i) { 
     return function() { 
      MyApp.xxx = this.position; 
      infowindow.setContent('x' + name[i][3] + '' + name[i][4] + 'x'); 
      infowindow.open(map, marker); 
     } 
    })(marker, i)); 
} 

var markerroad; 

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

    var request = { 
     origin: MyApp.xxx, 
     destination: 'Kaunas', 
     travelMode: google.maps.DirectionsTravelMode.DRIVING 
    }; 

    directionsService.route(request, function (response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      directionsDisplay.setDirections(response); 
     } 
    }) 
})); 
+0

其他标记是否存在加载或他们添加后?如果是这样,你需要'.on('click')'而不是'.click()',它只绑定运行时存在的节点。 – hexblot 2013-04-29 14:26:35

+0

除了上面的代码外,没有更多的代码可用于生成标记。 – user1876234 2013-04-29 14:29:47

+1

为什么你的'for'循环之外的第二个'google.maps.events.addListener'? – Ian 2013-04-29 14:38:37

回答

1

您不在循环中包含第二个addListener。试试这个:

var marker, i; 

for (i = 0; i < locations.length; i++) { 
    marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
     map: map, 
    }); 

    google.maps.event.addListener(marker, 'click', (function (marker, i) { 
     return function() { 
      MyApp.xxx = this.position; 
      infowindow.setContent('x' + name[i][3] + '' + name[i][4] + 'x'); 
      infowindow.open(map, marker); 
     } 
    })(marker, i)); 

    google.maps.event.addListener(marker, 'click', function() { 
     var request = { 
      origin: MyApp.xxx, 
      destination: 'Kaunas', 
      travelMode: google.maps.DirectionsTravelMode.DRIVING 
     }; 

     directionsService.route(request, function (response, status) { 
      if (status == google.maps.DirectionsStatus.OK) { 
       directionsDisplay.setDirections(response); 
      } 
     }); 
    }); 
} 

由于两个addListener电话是同一项目(),你很可能在每个功能结合的代码,这样,只有一个addListener电话。