gpt4 book ai didi

Javascript 循环 - 第二个变量不显示

转载 作者:行者123 更新时间:2023-11-30 07:46:11 26 4
gpt4 key购买 nike

代码如下:

<script type="text/javascript">
var offender_locations = [
["10010", "xxxxx", 3],
["10001", "xxxxx", 2],
["10002", "zzzzz", 1]
];
for (i = 0; i < offender_locations.length; i++) {
var address = offender_locations[i][0];
var icon_img = offender_locations[i][1];
}
</script>

这是输出:

1) 10010 - zzzzz
2) 10001 - zzzzz
3) 10002 - zzzzz

如您所见,var address 输出正确的值,但 *var icon_img* 总是重复相同的值。

我是一个 Javascript 初学者,我尝试了所有我能想到的方法,但我仍然得到相同的结果。

附言我在这里粘贴了完整的脚本:

<script type="text/javascript">
var offender_locations = [
["10010", "offender_icon.png", 3],
["10001", "offender_icon.png", 2],
["10002", "visitor_icon.png", 1]
];
var myOptions = {
zoom: 10,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map"), myOptions);
var latlng = new google.maps.LatLng(0, 0);

for (i = 0; i < offender_locations.length; i++) {
var infowindow = new google.maps.InfoWindow();
var geocoder_map = new google.maps.Geocoder();
var address = offender_locations[i][0];
var icon_img = offender_locations[i][1];
geocoder_map.geocode({
'address': address
}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: map.getCenter(),
icon: icon_img
});
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infowindow.setContent(offender_locations[i][0]);
infowindow.open(map, marker);
}
})(marker, i));
} else {
alert("The requested offender is not mappable !")
};
});
}
</script>

此脚本中的标记都是@正确的邮政编码,但它们都显示相同的图标 (visitor_icon.png)!

最佳答案

问题是您在循环中创建函数。 JavaScript 只有函数作用域,没有 block 作用域。 IE。您在循环中创建的变量在整个函数中只存在一次,只是值在每次迭代中发生变化。

在评估 icon_img 时(在传递给 geocode 的回调中),外部 for 循环已经完成并且 icon_img 具有值最后一次迭代。它适用于 address,因为它是在循环内计算的,而不是稍后。

您必须“捕获”icon_img 的当前值,您可以使用立即函数来实现:

for (i = 0; i < offender_locations.length; i++) { 
var infowindow = new google.maps.InfoWindow(),
geocoder_map = new google.maps.Geocoder(),
address = offender_locations[i][0],
icon_img = offender_locations[i][1];

(function(addr, img) { // <-- immediate function call
geocoder_map.geocode({'address': addr}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: map.getCenter(),
icon: img
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(addr);
infowindow.open(map, marker);
});
} else {
alert("The requested offender is not mappable !");
}
});
}(address, icon_img)); // <-- immediate function call
}

也许您必须对更多变量执行此操作...不确定。

关于Javascript 循环 - 第二个变量不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com