我有以下代码:
function codeAddress(){
geocoder = new google.maps.Geocoder();
for (var i=1; i < 4; i++){
var sAddress =document.getElementById("search_postcode" + i).value ;
var loc=[];
geocoder.geocode({ 'address': sAddress}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK)
{
loc[0] = results[0].geometry.location.lat();
loc[1]=results[0].geometry.location.lng();
document.getElementById("geo_lat" + i).value = loc[0];
document.getElementById("geo_lon" + i).value = loc[1];
}
else
{
alert(status);
}
}); //end geocode function
} //end for
} //end codeAddress function
任何人都可以看到为什么变量我没有设定?如果我用数字替换i,代码工作正常,但在javascript错误控制台中,我没有被定义,因此var sAddress
为NULL。
当我在定义'for'循环后立即设置断点时,以下代码在键入控制台时给出了正确的答案:
为什么它在代码中不起作用,但在手动输入控制台时会起作用?
答案 0 :(得分:1)
如果确切代码使用i
替换为数字,那么看起来问题是,当您的回调被调用时,捕获的i
将为4(如果它没有导致您当前的问题将导致未来的问题)
尝试此操作(将i
复制到新范围中):
function codeAddress(){
geocoder = new google.maps.Geocoder();
for (var i=1; i < 4; i++){
var sAddress =document.getElementById("search_postcode" + i).value ;
var loc=[];
geocoder.geocode({ 'address': sAddress}, (function(i){
return function(results, status) {
if (status == google.maps.GeocoderStatus.OK)
{
loc[0] = results[0].geometry.location.lat();
loc[1]=results[0].geometry.location.lng();
document.getElementById("geo_lat" + i).value = loc[0];
document.getElementById("geo_lon" + i).value = loc[1];
}
else
{
alert(status);
}
};
})(i)); //end geocode function
} //end for
} //end codeAddress function
否则,如果document.getElementById("search_postcode" + i)
在您的函数中返回null而不是在控制台中,则可能意味着您的代码在文档加载之前正在运行
答案 1 :(得分:0)
在调用 getElementById 方法之前检查是否存在特定的 ,