Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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_Google Maps_Dom Events - Fatal编程技术网

Javascript 谷歌地图:事件侦听器仅查找最新添加的对象

Javascript 谷歌地图:事件侦听器仅查找最新添加的对象,javascript,google-maps,dom-events,Javascript,Google Maps,Dom Events,我在多个多边形上有鼠标悬停功能,但当我将鼠标悬停在我首先添加的多边形上时,事件侦听器始终使用最新添加的多边形 这是我的密码: 根据乔恩的建议编辑。谷歌地图似乎与此代码挂起 <!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="content-type"

我在多个多边形上有鼠标悬停功能,但当我将鼠标悬停在我首先添加的多边形上时,事件侦听器始终使用最新添加的多边形

这是我的密码:

根据乔恩的建议编辑。谷歌地图似乎与此代码挂起

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Google Maps JavaScript API v3 Example: Polygon Simple</title> 
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">

  function initialize() {

    var myLatLng = new google.maps.LatLng(64.75539,11.557617);
    var myOptions = {
      zoom: 5,
      center: myLatLng,
      mapTypeId: google.maps.MapTypeId.TERRAIN,
      disableDoubleClickZoom: true
    };

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    var counties = [
        [ new google.maps.LatLng(65.5938045448117, 18.1841615957621), new google.maps.LatLng(65.60908024341229, 18.0771327994505), new google.maps.LatLng(65.648282356232, 17.797014589131), new google.maps.LatLng(65.6726402881329, 17.6650173420103), new google.maps.LatLng(66.05487225660011, 16.7827851638447), new google.maps.LatLng(66.0563835399301, 16.5826047275627), new google.maps.LatLng(66.30204247803511, 15.826110215697), new ... ],
        [ new google.maps.LatLng(60.2679550905311, 13.9522771739341), new google.maps.LatLng(60.1898004284838, 13.9706839102235), new google.maps.LatLng(60.2696058042898, 13.8508890937951), new google.maps.LatLng(60.4187463068127, 13.6952984208179), new google.maps.LatLng(60.4226284842923, 13.5706921611819), new google.maps.LatLng(60.448328778914, 13.4996704338411), new ... ]
    ];

    var polygons = new Array();

    for (var i = 0; i < counties.length; i++)
    {
        polygons[i] = new google.maps.Polygon({
          paths: counties[i],
          strokeColor: "#FF0000",
          strokeOpacity: 0.8,
          strokeWeight: 2,
          fillColor: "#FF0000",
          fillOpacity: 0.35,
          isSelected: false
        });

        polygons[i].setMap(map);

        google.maps.event.addListener(polygons[i],'click',function(event) {
            toggleSelection(polygons[i]);
        });

        google.maps.event.addListener(polygons[i],'mouseover',function(event) {
          polygons[i].setOptions({ fillOpacity: 0.45 });
        });

        google.maps.event.addListener(polygons[i],'mouseout',function(event) {
            if (!polygons[i].isSelected)
            {
              polygons[i].setOptions({ fillOpacity: 0.35 });
            }
        });
    }
  }

  function toggleSelection(polygon)
  {
    if (polygon.isSelected)
    {
      polygon.setOptions({ fillOpacity: 0.35 });
      polygon.isSelected = false;
    }
    else
    {
      polygon.setOptions({ fillOpacity: 0.45 });
      polygon.isSelected = true;
    }
  }
</script> 
</head> 
<body onload="initialize()"> 
  <div id="map_canvas"></div> 
</body> 
</html> 

谷歌地图JavaScript API v3示例:简单多边形
函数初始化(){
var mylatng=new google.maps.LatLng(64.75539,11.557617);
变量myOptions={
缩放:5,
中心:myLatLng,
mapTypeId:google.maps.mapTypeId.TERRAIN,
禁用双击缩放:真
};
var map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
var县=[
[新google.maps.LatLng(65.5938045448117,18.1841615957621),新google.maps.LatLng(65.6090802434122918.0771327994505),新google.maps.LatLng(65.648282356232,17.797014589131),新google.maps.LatLng(65.6726402881329,17.6650173420103),新google.maps.LatLng(66.05487225660011,16.782785163847),新google.maps.LatLng(66.0563835399301,16.5826047275627),新的google.maps.LatLng(66.3020424780511,15.826110215697),新的…],
[新google.maps.LatLng(60.2679550905311,13.9522771739341),新google.maps.LatLng(60.1898004284838,13.970689102235),新google.maps.LatLng(60.2696058042898,13.85088909093751),新google.maps.LatLng(60.4187463068127,13.6952984208179),新google.maps.LatLng(60.424284842923,13.57066921618119),新google.maps.LatLng(60.448328778914,13.4996704338411),新…]
];
var polygons=新数组();
对于(变量i=0;i
您必须将每个多边形存储在一个数组中,然后为数组的每个元素添加事件侦听器。否则,您将为最新的多边形重写事件侦听器。我必须在应用程序中使用一组标记进行同样的操作。这对于内存消耗来说是不幸的,但只要您没有处理数百个多边形好吧,那你就没事了

var polygons = new Array();

for (var i = 0; i < whatever; i++) {
    polygon[i] = new Polygon(stuff);
    event.addListener(polygon[i], moreStuff);
}
var polygons=new Array();
for(var i=0;i
与您类似:我使用KML多边形作为标记层上方的亮显层;我使用此代码禁用onclick(因此我的标记区域将单击,但多边形层不会)。HTH


谢谢你的回答。但是,代码似乎挂起了。我已经用我当前的代码更新了我的主要帖子。嗯。就我所知,你的代码看起来很好。你正在创建多少个多边形?看起来只有2个。对吗?通过挂起,具体挂起了什么?当我第一次尝试将鼠标移到其中一个Pylogon上时,它挂起了。正如你所能看到的那样ee在代码中,鼠标覆盖的多边形应该会改变不透明度,但什么都不会发生,而且都是以一种非常模糊的方式,所以我不怀疑有任何语法错误。是的,有两个Pylogon。这很有趣。可能值得使用javascript调试器,例如Firebug(用于Firefox)找到问题的根源。祝你好运。啊,这是for循环。因为我已经做了两次迭代,所以我在2(第三次迭代),这使得代码在polygons数组中获取索引2,而polygons数组显然不存在。因此,问题在于我构建事件侦听器的方式。自发的解决方案是将多边形作为参数传递到事件函数中,但我不知道如何做。有没有办法做到这一点?如果您解决了问题,请发布ans回答并接受它。答案/解决方案不包含在问题中。当时我无法创建自己的答案,至少还有八个小时,所以我将答案发布在我的主要帖子中。你是否从帖子中删除了答案?是的。如果你必须等待,然后才能在正确的位置写答案,那么等待……但不要只是写错了换个地方!
function createLayers() {
var layerRest = new google.maps.KmlLayer('earth.kml', {preserveViewport:true, clickable: false});
layerRest.setMap(map);


polylayers.push(layerRest); // Layer # 0        
}