Javascript 为什么我的变量没有被定义?
我有以下代码:Javascript 为什么我的变量没有被定义?,javascript,Javascript,我有以下代码: 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': sAddr
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
函数代码地址(){
geocoder=新的google.maps.geocoder();
对于(变量i=1;i<4;i++){
var sAddress=document.getElementById(“search_postcode”+i).value;
var loc=[];
geocoder.geocode({'address':sAddress},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK)
{
loc[0]=结果[0]。几何体。位置。lat();
loc[1]=结果[0]。几何体。位置。lng();
document.getElementById(“geo_lat”+i).value=loc[0];
document.getElementById(“geo_lon”+i).value=loc[1];
}
其他的
{
警报(状态);
}
});//结束地理编码函数
}//结束
}//结束代码地址函数
有人知道为什么变量i没有被设置吗?如果我用一个数字替换I,代码工作正常,但是在javascript错误控制台中,没有定义I,因此var sAddress
为空
编辑 当我在定义“for”循环后立即放置断点时,以下代码在控制台中键入时给出了正确答案:
为什么它在代码中不起作用,但在手动输入控制台时会起作用?在调用getElementById方法之前,请检查特定Id是否存在,如果确切的代码与您所说的用数字替换的
i
一起工作,那么问题似乎是,在调用回调时,捕获的i
将是4(如果它不会导致您当前的问题,将导致未来的问题)
尝试此操作(将i
复制到新范围):
函数代码地址(){
geocoder=新的google.maps.geocoder();
对于(变量i=1;i<4;i++){
var sAddress=document.getElementById(“search_postcode”+i).value;
var loc=[];
geocoder.geocode({'address':sAddress},(函数(i){
返回函数(结果、状态){
if(status==google.maps.GeocoderStatus.OK)
{
loc[0]=结果[0]。几何体。位置。lat();
loc[1]=结果[0]。几何体。位置。lng();
document.getElementById(“geo_lat”+i).value=loc[0];
document.getElementById(“geo_lon”+i).value=loc[1];
}
其他的
{
警报(状态);
}
};
})(i) );//结束地理编码函数
}//结束
}//结束代码地址函数
否则,如果
document.getElementById(“search_postcode”+i)
在函数中返回null,而不是在控制台中返回null,则可能意味着您的代码在加载文档之前正在运行可能i
被定义在范围之外?即使它被定义在范围之外,也不会影响任何事情。Giovanni,我会做一个console.log('search_postcode'+I)在设置sAddress
并查看打印出的内容之前,请选择code>。我猜您会看到您期望的结果,但该ID在您的DOM中不存在。问题似乎是,在调用回调时,我将4@Giovanni你确定你的函数在文档加载后被调用了吗?Matthew有一个观点。。为什么不把var j=i;var loc=[]之后;在geocode回调函数中,用j和console log i和j更改i,然后查看您将看到的(console.log j在geocode回调中)进度!i的值现在被设置,因此变量sAddress被设置为sy217ex(通过断点的代码我可以看到一切),但是从地理编码器接收到的状态未定义,因此在if语句中忽略了代码。。。有什么想法吗?我建议您使用firebug或任何其他调试工具检查错误,检查元素是否正确添加,并尝试提醒document.getElementById(“search_postcode”+i)。value也。。您的代码似乎是正确的,html页面中可能会出现错误
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