My code
// do ajax request and get JSON response
for (var i = 0; i < data.results.length; i++) {  
    result = data.results[i];
    // do stuff and create google maps marker    
    marker = new google.maps.Marker({  
        position: new开发者_如何学运维 google.maps.LatLng(result.lat, result.lng),   
        map: map,  
        id: result.id  
    });  
    google.maps.event.addListener(marker, 'click', function() {  
        createWindow(marker.id); //<==== this doesn't work because marker always points to the last results when this function is called
    });  
}
How to solve this?
Try this:
with ({ mark: marker }) {
    google.maps.event.addListener(mark, 'click', function() {  
        createWindow(mark.id);
    });
}
An example that demonstrates the use of with:
for (var i = 0; i < 10; i++) {
    setTimeout(function() { console.log(i); }, 1000);
}
The above will log 10 ten times.
for (var i = 0; i < 10; i++) {
    with ({ foo: i }) {
        setTimeout(function() { console.log(foo); }, 1000);
    }
}
This will log 0 to 9, as desired, thanks to with introducing a new scope.
JavaScript 1.7 has a let statement that is nicer, but until that is widely supported, you can use with.
And use var for your variables.
The classic closure problem strikes again!
  google.maps.event.addListener(marker, 'click', function(id) {
    return function(){
      createWindow(id); //<==== this doesn't work because marker always points to the last results when this function is called
    }
  }(marker.id));     
Looks like you've got a closure problem. See these questions:
- google maps api all markers opening the same infowindow
- google maps trouble closures passing by reference
- dynamically adding listeners to google maps markers
try this one
var marker = new Array();
for (var i = 0; i < data.results.length; i++) {  
    result = data.results[i];
    // do stuff and create google maps marker    
    marker[i] = new google.maps.Marker({  
        position: new google.maps.LatLng(result.lat, result.lng),   
        map: map,  
        id: result.id  
    });  
    google.maps.event.addListener(marker[i], 'click', example(marker[i].id));  
}
create new function
function example(my_window){
    return function(){
        createWindow(my_window);
    }
}
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论