1

我想讓用戶放下最多10個標記並將它們移除onClick。當用戶添加標記或拖拽時,我還會用地圖上標記的座標更新「div」。除了當用戶刪除一個標記時,我有一切工作,當我循環通過標記時,它似乎仍然在地圖上。任何想法我做錯了什麼?完全破壞gmap3上的標記

的jsfiddle:jsfiddle.net/ryanverdel/WRyrJ/

代碼:

$(document).ready(function() { 

     var markerCount = 0; 

     $("#test1").gmap3({ 
      map: { 
       options: { 
        center: [-2.2214281090541204, -78.695068359375], 
        zoom: 8, 
        mapTypeId: google.maps.MapTypeId.ROADMAP, 
        mapTypeControl: true, 
        mapTypeControlOptions: { 
        style: google.maps.MapTypeControlStyle.DROPDOWN_MENU 
        }, 
        navigationControl: true, 
        scrollwheel: true, 
        disableDoubleClickZoom: true, 
        streetViewControl: false, 

       }, 
       events: { 


        click: function (map, event) { 

         if(markerCount < 10){ 


         $(this).gmap3(

          { 
           marker: { 
            latLng: event.latLng, 
            options:{ 
            draggable: true, 
            animation: google.maps.Animation.DROP, 
            }, 



            events: { 
            click: function(marker) { 

            marker.setMap(map); 
            marker.setMap(null); 
            marker = null; 
            delete marker; 
            console.log(marker); 

            markerCount--; 
             }, 

            dragend: function(marker) { 
            $("#inputArray").empty(); 

          setTimeout(function(){ 
          var markers = $("#test1").gmap3({ 
          get: { 
          all: true 
          } 
          }); 

          $.each(markers, function(i, marker){ 

          $("#inputArray").append('<p>{"latitude":' + marker.position.lat() +', '+ '"longitude":' + marker.position.lng() +'},'+'</p>'); 
          }); 
          }, 400); 



             } 


             }, 


            }, 


           }); 

          markerCount++; 

          $("#inputArray").empty(); 

          setTimeout(function(){ 
          var markers = $("#test1").gmap3({ 
          get: { 
          all: true 
          } 
          }); 

          $.each(markers, function(i, marker){ 

          $("#inputArray").append('<p>{"latitude":' + marker.position.lat() +', '+ '"longitude":' + marker.position.lng() +'},'+'</p>'); 
          }); 
          }, 400); 

         } 

         else{ 
          return false; 
         }; 

        } 
       } 
      } 
     }); 

    }); 

回答

2

這樣的事情也許是比gmap3簡單的少。與直接google.maps API所需的相比,您需要稍微不同的心態。

禰主要poitns:

  • 您需要提供一個ID,名稱或標記
  • 您需要與clear
  • 刪除標記你需要明智地利用回調的(標記gmap3方式)。

,這裏是你的代碼拆散成一組功能,配備必要的修正應用於

$(document).ready(function() { 
    var mapOpts = { 
     center: [-2.2214281090541204, -78.695068359375], 
     zoom: 8, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     mapTypeControl: true, 
     mapTypeControlOptions: { 
      style: google.maps.MapTypeControlStyle.DROPDOWN_MENU 
     }, 
     navigationControl: true, 
     scrollwheel: true, 
     disableDoubleClickZoom: true, 
     streetViewControl: false, 
    }; 
    function genId() { 
     return '' + (new Date()).getTime(); 
    } 

    function addMarker(map, event) { 
     if (markerCount < 10) { 
      var uid = genId(); 
      $(this).gmap3({ 
       marker: { 
        latLng: event.latLng, 
        options: { 
         draggable: true, 
         animation: google.maps.Animation.DROP 
        }, 
        events: { 
         click: function() { 
          clearMarker(uid); 
         }, 
         dragend: listMarkers 
        }, 
        id: uid 
       } 
      }); 
      markerCount++; 
      listMarkers(); 
     } else { 
      return false; 
     }; 
    } 
    function listMarkers() { 
     $("#test1").gmap3({ 
      get: { 
       all: true, 
       callback: function(results) { 
        $("#inputArray").empty(); 
        $.each(results, function (i, marker) { 
         $("#inputArray").append('<p>{"latitude":' + marker.position.lat() + ', ' + '"longitude":' + marker.position.lng() + '},' + '</p>'); 
        }); 
       } 
      } 
     }); 
    } 
    function clearMarker(uid) { 
     $('#test1').gmap3({ 
      clear: { 
       id: uid, 
       callback: function() { 
        listMarkers(); 
        markerCount--; 
       } 
      } 
     }); 
    } 

    var markerCount = 0; 

    $("#test1").gmap3({ 
     map: { 
      options: mapOpts, 
      events: { 
       click: addMarker 
      } 
     } 
    }); 
}); 

DEMO

+0

太謝謝你了!我一直在查看「清除」功能,但注意到無法清除沒有標識,標記或名稱的特定標記。我正在爲每個標記製作一個dynmaic id的部分而苦苦掙扎。先生,先生。動作setMap(null)是清除標記的一種骯髒方式,因爲它知道它只是銷燬覆蓋。你能給我一些很好的參考資料來學習gmap3的更多文檔嗎? – ryan

+0

我的主要參考是[gmap3文檔](http://gmap3.net/en/catalog/)。與其他任何東西一樣,我也是谷歌的具體問題,並經常返回到文檔或StackOverflow中。你的問題其實很棘手。我發現文檔中有很多例子,但在解釋一般原則方面相對較差。在點擊解決方案之前,它導致我下了幾個盲人小巷。最後,這是一個整理小提琴中大量亂碼的問題。像許多人一樣,我並不總是知道答案,但喜歡找出解決方案。 –