2012-12-12 43 views
1

我是JavaScript新手,我想從谷歌V2遷移到谷歌V3,爲此我只是改變V2中使用的方法略有所有工作,但當我試圖改變addListener從V2到V3我面臨像v2一樣的問題,同樣的監聽器用於將標記放在地圖上,但是當涉及到V3時,我無法在地圖上放置標記。在這裏,我發佈了v2代碼和V3代碼。請幫我解決問題。 V2是:谷歌V3添加點擊清單器

GEvent.addListener(map, "click", function(marker, point) { 
       console.debug('after Click map is '+map+' marker is '+marker+' point is '+point); 
       if (marker) { 
         if(PolygonMarkers.length == 1){ //Only one marker in the array 
          map.removeOverlay(PolygonMarkers[0]); 
          map.removeOverlay(PolygonMarkers[0]); 
          PolygonMarkers = []; 
          if(Polygon){map.removeOverlay(Polygon)}; 
         } else{      /*More then one marker*/ 
          var RemoveIndex = -1; 
          var Remove; 
          //Search for clicked Marker in PolygonMarkers Array 
          for(var m=0; m<PolygonMarkers.length; m++) 
          { 
           if(PolygonMarkers[m].getPoint().equals(marker.getPoint())) 
           { 
            RemoveIndex = m; Remove = PolygonMarkers[m]; 
            break; 
           } 
          } 
          //Shift Array elements to left 
          for(var n=RemoveIndex; n<PolygonMarkers.length-1; n++) 
          { 
           PolygonMarkers[n] = PolygonMarkers[n+1]; 
          } 
          PolygonMarkers.length = PolygonMarkers.length-1 //Decrease Array length by 1 
          map.removeOverlay(Remove); //Remove Marker 
          geofencedetails.drawPolygon(); //Redraw Polygon 
          } 

         allMarkers = PolygonMarkers; 

        } else { 
        // Adds a new Polygon boundary marker 
         var markerOptions = { icon: icon, draggable: true }; 
         var marker = new GMarker(point, markerOptions); 
         PolygonMarkers.push(marker); //Add marker to PolygonMarkers array 
         map.addOverlay(marker); //Add marker on the map 
         GEvent.addListener(marker,'dragstart',function(){ //Add drag start event 
          marker.setImage(icon.image); 
          polygon_resizing = true; 
         }); 
         GEvent.addListener(marker,'drag',function(){ 
          geofencedetails.drawPolygon(); 
          }); //Add drag event 
         GEvent.addListener(marker,'dragend',function(){ //Add drag end event 
          marker.setImage(icon.image); 
          polygon_resizing = false; 
          geofencedetails.drawPolygon(); 
         }); 
         geofencedetails.drawPolygon(); 

         allMarkers = PolygonMarkers; 
       } 
       });` 

和V3是

 google.maps.event.addListener(map, "click", function(marker, point) { 
      if (marker) { 
       //console.debug('marker '+marker.toSource()); 
       if(PolygonMarkers.length == 1){ //Only one marker in the array 
        map.removeOverlay(PolygonMarkers[0]); 
       map.removeOverlay(PolygonMarkers[0]); 
       PolygonMarkers = []; 
       if(Polygon){ 
        map.removeOverlay(Polygon) 
       }; 
       }else {      /*More then one marker*/ 
        //console.debug('PolygonMarkers.length is '+PolygonMarkers.length); 
        var RemoveIndex = -1; 
        var Remove; 
        //Search for clicked Marker in PolygonMarkers Array 
        for(var m=0; m<PolygonMarkers.length; m++){ 
         //console.debug('PolygonMarkers['+m+'] '+PolygonMarkers[m]); 
         if(PolygonMarkers[m].getPosition().equals(marker.getPosition())){ 
          //console.debug('Both are equal '); 
          RemoveIndex = m; 
          Remove = PolygonMarkers[m]; 
          break; 
         } 
        } 
        //Shift Array elements to left 
        for(var n=RemoveIndex; n<PolygonMarkers.length-1; n++){ 
         PolygonMarkers[n] = PolygonMarkers[n+1]; 
        } 
        PolygonMarkers.length = PolygonMarkers.length-1 //Decrease Array length by 1 
        /*map.removeOverlay(Remove); //Remove Marker*/ 
        for (var i = 0; i < allMarkers.length; i++) { 
         allMarkers[i].setMap(null); 
        } 
        geofencedetails.drawPolygon(); //Redraw Polygon 
       } 

       allMarkers = PolygonMarkers; 

      } else { 
       //console.debug('In else block'); 
       // Adds a new Polygon boundary marker 
       var markerOptions = { icon: icon, draggable: true }; 
       //console.debug('1'); 
       var marker = new GMarker(point, markerOptions); 
       //console.debug('2'); 
       PolygonMarkers.push(marker); //Add marker to PolygonMarkers array 
       //console.debug('3'); 
       map.addOverlay(marker); //Add marker on the map 
       //console.debug('4'); 
       GEvent.addListener(marker,'dragstart',function(){ //Add drag start event 
        //console.debug('5'); 
       marker.setImage(icon.image); 
       //console.debug('6'); 
       polygon_resizing = true; 
       }); 
       GEvent.addListener(marker,'drag',function(){ 
        geofencedetails.drawPolygon(); 
       }); //Add drag event 
       GEvent.addListener(marker,'dragend',function(){ //Add drag end event 
        marker.setImage(icon.image); 
       polygon_resizing = false; 
       geofencedetails.drawPolygon(); 
       }); 
       geofencedetails.drawPolygon(); 

       allMarkers = PolygonMarkers; 
      } 
     }); 

回答

1

您需要點擊事件綁定到標記,而不是地圖。

google.maps.event.addListener(marker, "click", function(event) { .... }); 

谷歌地圖API V3中的UI事件通常會傳送事件 參數,它可通過事件監聽器來訪問,並指出了事件發生時的UI 狀態。例如,UI「點擊」事件 通常會傳遞一個MouseEvent,其中包含一個latLng屬性,表示地圖上點擊的位置爲 。請注意,此行爲對於 UI事件是唯一的; MVC狀態更改不會在其事件中傳遞參數。

+0

這裏的標記是空的,當我跟蹤你的建議什麼也沒有發生甚至iclick在地圖上和BTW第一次它應該爲空然後它去第三else塊和標記將添加到地圖按API- V2.I需要使用相同的代碼,只需要修改現有的代碼。 – venkat

+0

它在v3中不起作用。這聽起來像你需要兩件不同的事情。 1)點擊地圖時,會添加一個標記。 2)如果那個標記被點擊,做一些事情。您將需要兩個偵聽器,一個在地圖上處理點擊並添加標記,然後在該標記實例上添加一個偵聽器來執行其他操作。 – Rick