Javascript 函数仅在1个标记上工作

Javascript 函数仅在1个标记上工作,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我这里的问题是函数google.maps.event.addListener(marker,'click',(function()只有在我单击第一个标记时才起作用。单击所有其他标记无效。我希望此函数对所有标记都起作用。这里有什么问题 var marker, i; for (i = 0; i < locations.length; i++) { marker = new google.maps.Marker({ position: new google.maps.L

我这里的问题是函数
google.maps.event.addListener(marker,'click',(function()
只有在我单击第一个标记时才起作用。单击所有其他标记无效。我希望此函数对所有标记都起作用。这里有什么问题

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);
        }
    })
}));
var标记,i;
对于(i=0;i
循环中没有包含第二个
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);
            }
        });
    });
}
var标记,i;
对于(i=0;i

由于两个
addListener
调用都是针对同一项(
marker
),您可能可以在每个函数中组合代码,这样就只有一个
addListener
调用。

其他标记是否存在于加载状态,还是在加载之后添加?如果是,您需要
.on('click')
而不是
.click()
它只绑定运行时出现的节点。除了上面的代码之外,没有其他用于生成标记的代码。为什么您的第二个
google.maps.events.addListener
for
循环之外?哈哈,好问题:) thanks@user1876234这解决了吗?移动到循环内部?如果解决了,我会创建一个答案