innerHTML的三个实例正在工作,第四个没有
Three instances of innerHTML are working, the fourth is not
我对编程完全陌生,所以请耐心等待。我最近才完成了Codecademy的一大部分,也读了几本书,所以我绝对是个新手。我已经设置了一个函数,它通过Google Maps API迭代Google Places库调用的结果,并将返回对象的属性写入HTML中的元素。我成功地使用了innerHTML的前三个实例(使用了stackoverflow社区的一些帮助,谢谢大家!)。我在第四个实例中遇到了一个大问题。
我打电话给谷歌地图提供的距离矩阵服务,经过几个小时的修补,我终于让它工作了,因为console.log命令似乎返回了我想要的东西。但foodDistance[0]。innerHTML =距离不工作!我都快疯了。下面是我的代码,这样你就知道我在说什么了,以防不清楚:
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < 10; i++) {
var place = results[i];
createMarker(place);
var foodName = foodArray[i].getElementsByClassName("listing_name");
var foodRating = foodArray[i].getElementsByClassName("listing_rating");
var foodAddress = foodArray[i].getElementsByClassName("listing_address");
var foodDistance = foodArray[i].getElementsByClassName("listing_dist");
foodName[0].innerHTML = place.name;
foodRating[0].innerHTML = place.rating;
foodAddress[0].innerHTML = place.vicinity;
distanceService.getDistanceMatrix({
origins: [houston],
destinations: [place.geometry.location],
travelMode: google.maps.TravelMode.DRIVING,
avoidHighways: false,
avoidTolls: false,
unitSystem: google.maps.UnitSystem.IMPERIAL
}, distanceCallback);
function distanceCallback(response, status) {
if (status == google.maps.DistanceMatrixStatus.OK) {
var origins = response.originAddresses;
for (var x = 0; x < origins.length; x++) {
var results = response.rows[x].elements;
for (var j = 0; j < results.length; j++) {
var element = results[j];
var distance = element.distance.text;
foodDistance[0].innerHTML = distance;
console.log(distance);
}
}
}
};
};
}
}
这里是带有填充内容的HTML。Listing_name、listing_rating和listing_address都按预期填充:
<div class="hyperlocal_listing_snippet" id="fd1">
<div class="listing_name">Stephen's bombass burritos</div>
<div class="listing_dist">0.2 Miles</div>
<div class="listing_address">blah blah blah</div>
<div class="listing_rating">3.2</div>
</div>
提前感谢您的反馈。让我抓狂的是,前三个工作得很好,但第四个就是不配合。我要么在找一个新视角来帮我找出我愚蠢的新手错误,要么我在找一个解释为什么这不起作用。谢谢!
您遇到了循环中异步函数的经典问题。
试着在for(...) {
行后面添加这个:
(function(i) {
在相应的}
之前:
})(i);
这将"锚定"i
的值,并解决您的问题。
您的函数distanceCallback
是异步函数。当此回调函数distanceCallback
被调用时,foodDistance[0]
包含无效或不同的值,因为您正在父函数
for
循环中更新变量foodDistance
。
相关文章:
- Angular:如何使用ng选项进行四个单独的选择
- JS-颜色选择器只有第一个工作
- 如何使多个工作在这种情况下
- 有人知道如何使用highchart API实现三个或四个级别的动态下拉图吗
- 获取两个输入元素的值,并检查第三个元素的值.将值设置为第四个元素
- 如何在图像上添加标签.在jquerymobile中图像的四个角落
- 如何在javascript中生成任意四个数字之间的随机数
- 根据下拉选择隐藏四个输入框
- 调整窗口大小时,页面上的四个图像将不会调整大小
- jQuery每5个工作小时重置一次颜色模式
- 我在一页上有两个简单的javascript幻灯片,但第二个停止了第一个工作
- 如何将制表符替换为四个空格 jQuery
- 如何使图形上最近的四个点发光
- Angularjs:显示字符串中的最后四个字符,并将其余字符替换为“X”
- Alasql - 如何在工作簿中创建多个工作表
- 从四个输入字段中查找总计或平均值,并在另一个输入字段中显示值
- 如何将字符串修剪到最后四个字符
- 包括四个.js文件,但只加载了一个??为什么
- 四个'东西'括号中的工作是Javascript
- innerHTML的三个实例正在工作,第四个没有