2013-05-11 79 views
0

我目前正在爲一家雜貨店的商店定位器工作。他們的網站是在Drupal中構建的,但我從零開始編碼商店定位器,而不是使用Drupal模塊。谷歌地圖infowindow無法打開/顯示:無

到目前爲止,一切似乎很好地結合在一起,但我無法弄清楚爲什麼當有人點擊標記時我的信息窗口不顯示。在做了一些研究並嘗試了不同的東西之後,下面的代碼似乎有些迴應:點擊標記時,地圖重新集中以爲泡泡騰出空間,但泡泡從不顯示。

更新:

一些更多的測試後,我發現,泡沫確實形成。該標記在那裏,但由於某種原因谷歌增加了一個顯示:無內聯樣式到它的容器點擊。現在我想知道如何防止這種情況?

任何想法/幫助非常感謝。

(function ($) { 
Drupal.behaviors.storelocator = { 
    attach: function (context, settings) {   

     var map; 
     var markers_array = []; 

     google.maps.event.addDomListener(window, 'load', function() { 
      var mapOptions = { 
        position: new google.maps.LatLng(41.030, -73.411), 
        zoom: 10, 
        maxZoom: 16, 
        mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 

      map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

      var bounds = new google.maps.LatLngBounds(); 

      $.get('/storelocator/storexml', function(xml) {       
       $(xml).find('marker').each(function() { 
        var banner_name = $(this).attr('name'); 
        var address = $(this).attr('address'); 
        var distance = parseFloat($(this).attr('distance')); 
        var latlng = new google.maps.LatLng(parseFloat($(this).attr('lat')), parseFloat($(this).attr('lng'))); 

        createMarker(map, latlng, banner_name, address); 
        bounds.extend(latlng); 
        map.fitBounds(bounds); 
       }); 
      }); 
    }); 



     function createMarker(map, latlng, banner_name, address) { 

      var icon_image = { 
       url: '/sites/default/modules/storelocator/images/' + banner_name + '.png', 
       size: new google.maps.Size(25, 30), 
       origin: new google.maps.Point(0, 0), 
       anchor: new google.maps.Point(12, 30) 
      } 
      var icon_shadow = { 
       url: '/sites/default/modules/storelocator/images/shadow.png', 
       size: new google.maps.Size(40, 30), 
       origin: new google.maps.Point(0, 0), 
       anchor: new google.maps.Point(12, 30) 
      } 
      var clickable_area = { 
       coord: [1, 1, 1, 30, 25, 30, 30, 1], 
       type: 'poly' 
      } 
      var marker = new google.maps.Marker({ 
       map: map, 
       position: latlng, 
       shadow: icon_shadow, 
       icon: icon_image, 
       shape: clickable_area, 
       title: address, 
       html: '<strong>' + banner_name + '</strong><br/>' + address 
      }); 

      google.maps.event.addListener(marker, 'click', function() { 
       infoWindow.setContent(this.html); 
       infoWindow.open(map, this); 
      }); 

      markers_array.push(marker); 
     } 

    } 
}; 
}(jQuery)); 
+0

你的標記在哪裏?泡泡窗口在哪裏?我在這裏看不到它? – 2013-05-11 17:03:34

+0

你得到了哪些javascript錯誤?你可以提供一個jsfiddle或鏈接到一個地圖,表現出這個問題? – geocodezip 2013-05-11 17:11:10

+0

根本沒有javascript錯誤。由於該項目在VPN後面,因此我無法提供鏈接。 – Zorrya 2013-05-11 17:41:42

回答

0

只是走一個希望很好的猜測在這裏,但我會說一定將您的信息窗口的定義是createMarker功能之外,與每次調用createMarker你實際上是重新定義信息窗口,肯定會失去範圍與以前創建的標記。

編輯:另一種選擇是將infoWindow實際分配給自己的標記,例如:marker.infoWindow = etc.等等,marker.infoWindow.setContent(等等,但我會說這可能是不必要的,因爲我給你的第一選擇是最好的做法通常

+0

將infoWindow的定義移到createMarker之外不會改變任何行爲。提醒點擊作品的內容,但是有些東西是在公開場合隱藏泡沫。將infoWindow分配給標記本身可以停止地圖的反應。 – Zorrya 2013-05-12 01:31:40

+0

好吧,確實是一個很快的猜測,但我仍然堅持說不要一直重新定義infoWindow。只有其他的東西,你確認'/ sites/default/modules/storelocator/images /'+ banner_name +'.png'實際上是正確的,並且可以在瀏覽器中訪問嗎?否則,如果您嘗試沒有自定義圖標,陰影和形狀的默認標記,會發生什麼情況?那它有用嗎? – astupidname 2013-05-12 08:25:15

+0

沒關係,正在考慮標記圖標,而不是信息窗口,我不認爲標記圖標會對消極影響 – astupidname 2013-05-12 08:33:35

0

你試試這個: Google maps InfoWindow not opening on click event

好像你的問題可能有同樣的原因,雖然我不知道它是什麼,以便在鏈接。回答,試試這個:

function addInfoWindow(marker, content) { 
    var infoWindow = new google.maps.InfoWindow({ 
     content: content 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
     infoWindow.open(map, marker); 
    }); 
}