作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试向谷歌地图添加标记,这些标记上有一个数字,但是我得到的是在整个循环中重复的相同标记,这是为什么?这是我的代码,
function codeAddress() {
var address = ['hd3 3nn', 'hd6 3qf'];
for (var i = 0; i < address.length; i++) {
var num = i;
geocoder.geocode( { 'address': address[i]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var image = new google.maps.MarkerImage('/~udders/wp-content/themes/muslenh2/img/markers/marker' + num + '.png',
new google.maps.Size(20, 34),
new google.maps.Point(0, 0),
new google.maps.Point(10, 34));
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
icon: image,
position: results[0].geometry.location
});
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
}
基本上这个/~udders/wp-content/themes/m/img/markers/marker' + num + '.png 正在创建/~udders/wp-content/themes/m/img/markers/marker1。 png 是最后一个循环的数字,它似乎覆盖了所有以前的图标图像。
最佳答案
这是因为how Javascript closures work .
您可以通过创建一个返回回调函数的单独函数来解决这个问题。
function codeAddress() {
var address = ['hd3 3nn', 'hd6 3qf'];
for (var i = 0; i < address.length; i++) {
geocoder.geocode({'address': address[i]}, getGeocoderCallBack(i));
}
}
function getGeocoderCallback(num) {
return function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var image = new google.maps.MarkerImage('/~udders/wp-content/themes/muslenh2/img/markers/marker' + num + '.png',
new google.maps.Size(20, 34),
new google.maps.Point(0, 0),
new google.maps.Point(10, 34));
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
icon: image,
position: results[0].geometry.location
});
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
};
}
关于javascript - javascript 循环得到意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962897/
我是一名优秀的程序员,十分优秀!