1

由于网页空闲(闲置可能是原因,Itz my Guess),因此在输入文本框中获取“NULL/Empty”值(我输入了值)。如果页面在一段时间内保持空闲状态,为输入文本获取“NULL/Empty”值?

我可以一一给出多个形状的名称。但是,如果我已持有5分钟的网页。然后,我无法第一次为多边形(在infowindow对象中)给出名称和描述。在第二次我可以给InfoWindow Object.But命名,但它没有自动关闭。我必须手动关闭它。请帮助我使用Google Maps API编写无错代码。

我已经做过的事情。在infoWindow Object的帮助下绘制多边形后,为每个多边形赋予一个名称和描述。代码如下。帮我找到我的代码中的错误,并帮助我确定我的糟糕实现的领域。

google.maps.visualRefresh = true; 

var polygons = []; 
var polygonShape = []; 
var polygonJson = {}; 
var map; 
var drawingTool = new google.maps.drawing.DrawingManager(); 

    function initialize() { 
     map = new google.maps.Map(document.getElementById('map-canvas'), { 
      zoom : 4, 
      center : new google.maps.LatLng(37.5499, -95.5524), 
      mapTypeId : google.maps.MapTypeId.ROADMAP 
     }); 
     drawingTool.setOptions({ 
      drawingMode : google.maps.drawing.OverlayType.POLYGON, 
      drawingControl : true, 
      drawingControlOptions : { 
       position : google.maps.ControlPosition.TOP_CENTER, 
       drawingModes : [ google.maps.drawing.OverlayType.POLYGON ] 
      } 
     }); 
     drawingTool.setMap(map); 

    google.maps.event.addListener(drawingTool, 'overlaycomplete', function(event) { 
     if (event.type == google.maps.drawing.OverlayType.POLYGON) { 
      createPolygon(event.overlay); 
     } 
    }); 
} 

    function createPolygon(polygon) { 
     polygons.push(polygon); 
     this.vertices = polygon.getPath(); 
     var content = '<label><b>Region Name : </b></label><input type="text" size="20" id="region_name"/></br><label align="top"><b>Description : </b></label><textarea id="region_desc" cols="20" rows="3"></textarea><br/><input type="button" value="Save Region" onclick="get_point_info(vertices);"/><br/>' 
      + '<b>-----INFO-----</b>'; 
     verticesLoop(this.vertices, content); 
    } 

    function get_point_info(vertices) { 
     var vertice = vertices; 
     var RegionName = document.getElementById('region_name').value; 
     var RegionDesc = document.getElementById('region_desc').value; 
     this.infoWindow.close(); 
     polygonJson = { 
      data : vertice, 
      regionName : RegionName, 
      regionDescription : RegionDesc 
     }; 
     alert(Object.toJSON(polygonJson)); 
    } 

    function verticesLoop(vertices, content) { 
     var clat = 0; 
     var clng = 0; 
     var contents = content; 
     var vert = vertices; 
     vert.forEach(function(xy, i) { 
      var contentString = '<br/><b>Lat :</b> ' + xy.lat() + '<b>Long : </b>' 
       + xy.lng(); 
      contents = contents + contentString; 
      clat = xy.lat(); 
      clng = xy.lng(); 
     }); 
     displayInfo(contents, new google.maps.LatLng(clat, clng)); 
    } 

    function displayInfo(conString, customPosition) { 
     this.infoWindow = new google.maps.InfoWindow({ 
      content : conString, 
      position : customPosition, 
      maxWidth : 350 
     }); 
     this.infoWindow.open(map); 
    } 
    google.maps.event.addDomListener(window, 'load', initialize); 

ERRORS: 的值是在文本框中越来越无效(有时)两者,其通过触发信息窗口的文本框中。

Regards, ArunRaj。

回答

1

看起来问题的根本原因在于允许用户在infowindow区域名称和描述被写入并且按下保存区域之前绘制多个多边形。如果您绘制了多个多边形,并且当您从最后一个单击Save Region时打开了信息窗口,则会从第一个多边形发送信息。因此,如果不为第一个多边形写你会得到空值,如:

Object {data: ug, regionName: "", regionDescription: ""} 

我会避免多边形绘制直到用保存区域内,使用drawingTool.setDrawingMode(null);不发送信息:

function displayInfo(conString, customPosition) { 
    console.log('this'); 
    console.log(this); 

    this.infoWindow = new google.maps.InfoWindow({ 
     content : conString, 
     position : customPosition, 
     maxWidth : 350 
    }); 

    drawingTool.setDrawingMode(null); 

    this.infoWindow.open(map); 
} 

并收集有关名称和说明的信息后再次启用它:

function get_point_info(vertices) { 
    var vertice = vertices; 
    var RegionName = document.getElementById('region_name').value; 
    var RegionDesc = document.getElementById('region_desc').value; 
    this.infoWindow.close(); 
    polygonJson = { 
     data : vertice, 
     regionName : RegionName, 
     regionDescription : RegionDesc 
    }; 
    console.log('Object.toJSON(polygonJson)'); 
    console.log(polygonJson); 

    drawingTool.setDrawingMode(google.maps.drawing.OverlayType.POLYGON); 
} 
+1

Jurkovic:嘿,真的非常感谢您发现我的错误。但我觉得,禁用和启用绘图工具不是一个好的选择。这是做到这一点的唯一方法吗? – ArunRaj

+0

它不仅是选项,而且最可能是最简单的一个。 如果绘制了另一个多边形,则一种选择是关闭先前的infowindow。但在这种情况下,您必须启用多边形上的单击事件才能再次打开infowindow,这将进一步使设计复杂化,因为您无法在其后面绘制另一个多边形。 另一种选择是为每个多边形设置一个infowindow。现在你只有一个全球的所有人。你将不得不跟踪每个状态并处理它们。像那样的...... –

+0

尤尔科维奇:非常感谢你的可爱解释。我有些困惑。现在我清楚了。你找到任何方法来减少我的代码?如果是的话,你能帮我吗? – ArunRaj

相关问题