为什么我的变量没有被定义?

时间:2014-02-08 19:55:08

标签: 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': 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'循环后立即设置断点时,以下代码在键入控制台时给出了正确的答案:

enter image description here

为什么它在代码中不起作用,但在手动输入控制台时会起作用?

2 个答案:

答案 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 方法之前检查是否存在特定的