[英]Pass parameter to callback function
我的代码
//执行ajax请求并获取JSON响应
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
});
}
怎么解决这个?
试试这个:
with ({ mark: marker }) {
google.maps.event.addListener(mark, 'click', function() {
createWindow(mark.id);
});
}
演示使用with
的示例:
for (var i = 0; i < 10; i++) {
setTimeout(function() { console.log(i); }, 1000);
}
以上将记录10
次。
for (var i = 0; i < 10; i++) {
with ({ foo: i }) {
setTimeout(function() { console.log(foo); }, 1000);
}
}
这将记录0
到9
,如需要的话,由于with
引入一个新的范围。
JavaScript 1.7中有一个let
语句是更好的,但是直到,获得广泛支持,您可以使用with
。
并使用var
作为变量。
经典的关闭问题再次出现!
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));
看起来你有一个关闭问题。 看到这些问题:
试试这个
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));
}
创造新的功能
function example(my_window){
return function(){
createWindow(my_window);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.