Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的变量没有被定义?_Javascript - Fatal编程技术网

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