2016-03-21 94 views
0

即时通讯尝试获取状态代码使用反向地理位置和谷歌API,但没有获得第一次点击字符串输出。在第二次点击时,显示结果已经存在。如何在第一次点击按钮时显示它?一直卡在这一点上。需要点击按钮两次的JavaScript函数提供输出

的Javascript:通过ASP创建

var distance=""; 
function RetrieveState() { 
    geocoder2 = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(-41.495839, 147.172006); 

    distance += " State is: " 

    if (geocoder2) {geocoder2.geocode({ 'latLng': latlng }, function (results,  status) 
    { 
     if (status == google.maps.GeocoderStatus.OK) 
     { 
      var result = results[0]; 
      for (var i = 0, len = result.address_components.length; i < len; i++) { 
       var ac = result.address_components[i]; 
       if (ac.types.indexOf("administrative_area_level_1") >= 0) 
        distance += ac.short_name; 
      } 
     }  
    } 
} 

document.getElementById("distance_road").innerHTML = distance; 
} // end RetrieveState 

按钮:

<asp:Button ID="Button2" runat="server" Text="Button 2" OnClientClick="RetrieveState()" /> 

输出: 第1点击:国家是: 第2点击:国家是:TAS状态: 3rd点击:状态是:TAS状态是:TAS状态是:

回答

0

这似乎是因为您没有在geocode回调函数中设置innerHTML - 这意味着您要在之前设置innerHTML ,因此返回地理编码结果。移动行:

document.getElementById("distance_road").innerHTML = distance; 

以下if语句的末尾:

if (status == google.maps.GeocoderStatus.OK) 
0

因为在第一次距离变量设置,并且由于它是全球性的,当代码执行它displaing第二时间,尝试下面的代码。

var distance=""; 
    function RetrieveState() { 
     geocoder2 = new google.maps.Geocoder(); 
     var latlng = new google.maps.LatLng(-41.495839, 147.172006); 

     distance += " State is: " 

     if (geocoder2) {geocoder2.geocode({ 'latLng': latlng }, function (results,  status) 
     { 
      if (status == google.maps.GeocoderStatus.OK) 
      { 
       var result = results[0]; 
       for (var i = 0, len = result.address_components.length; i < len; i++) { 
        var ac = result.address_components[i]; 
        if (ac.types.indexOf("administrative_area_level_1") >= 0) 
         distance += ac.short_name; 
       } 
       document.getElementById("distance_road").innerHTML = distance; 
      // end RetrieveState 
      }  
     } 
    } 
    }