2

我是 Gmaps 编程的初学者。

我想创建一个包含两个选项卡的 InfoWindow,其中一个仅包含信息,另一个带有一些 HTML 表单(按钮和文本)。

http://gmaps-samples-v3.googlecode.com/svn/trunk/infowindow/tabs.html

var checkText = "Coordinates";

var content = [
  '<div id="tabs">',
  '<ul>',
    '<li><a href="#tab_1"><span>One</span></a></li>',
    '<li><a href="#tab_2"><span>Two</span></a></li>',
  '</ul>',
  '<div id="tab_1">',
     '<p>Marker i:"</p>'+
     '<form id='button'>'+
       '<div>'+
         '<input type='submit' value='Submit' />'+
       '</div>'+
     '</form>',
  '</div>',
  '<div id="tab_2">',
    '<p>Info: '+checkText+'</p>',
  '</div>',
  '</div>'
].join('');

然后,事件监听器:

google.maps.event.addListener(infoWindow, 'domready', function() {
  $("#tabs").tabs();
});

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

选项卡和按钮都完美显示,但我不知道如何将其与操作相关联,例如:

marker.draggrable = true;  // letting the marker to move
checkText =  marker.getPosition();  // changing the tab info whenever marker moves

我猜这个问题与 jquery-tabs 无关,而是与任何带有 html-form 的信息窗口有关。谢谢。

//-------------------------

我将简化我的问题。

我准备了这个示例,您可以在信息窗口中找到一个“按钮”: http ://www.sipa.es/prueba_fer/index_prueba.html

如何将操作与该按钮相关联?例如,更改缩放、打开新窗口等。

谢谢

4

1 回答 1

0

标记对象具有拖动事件

  • 拖动:当用户拖动标记时,会重复触发此事件。
  • dragend:当用户停止拖动标记时触发此事件。
  • draggable_changed:当标记的可拖动属性改变时触发此事件。
  • dragstart:当用户开始拖动标记时触发此事件。

然后在事件触发时更新您的内容

google.maps.event.addListener(marker, 'dragend', function(event) {
    checkText = this.getPosition();
    content = [
        '<div id="tabs">',
                '<ul>',
                    '<li><a href="#tab_1"><span>One</span></a></li>',
                    '<li><a href="#tab_2"><span>Two</span></a></li>',
                '</ul>',
            '<div id="tab_1">',
                '<p>Marker i:"</p>'+
                '<form id="button">'+
                    '<div>'+
                        '<input type="submit" value="Submit" />'+
                    '</div>'+
                '</form>',
            '</div>',
                '<div id="tab_2">',
                    '<p>Info: '+checkText+'</p>',
                '</div>',
        '</div>'
    ].join('');  

});

更新:

好的,您需要确保在将信息窗口中的元素附加到 DOM 时捕获它们。Infowindows 有一个domready事件。我更新了您示例中的函数以显示这一点。另外,请记住回发将重置地图。你没有说你是否需要回帖,所以我取消了它使用e.preventDefault();

(function () {
     var marker = new google.maps.Marker({
          map: map,
          draggable: false,
          position: new google.maps.LatLng(40.30, -3.71)
     });
     var content = "<div id='tabs'>" +
                   "<form id='button'>" +
                   "<div>" +
                   "<input id='btn' type='submit' value='Submit'/>" +
                   "</div>" +
                   "</form>" +
                   "</div>";

     google.maps.event.addListener(marker, 'click', function (event) {
            infoWindow.setContent(content);
            infoWindow.open(map, this);
            map.setCenter(this.getPosition());

     });    

     google.maps.event.addListener(infoWindow, 'domready', function (e) {
           //attach the click event to the button.
           document.forms.button.btn.onclick = function (e) {
                e.preventDefault(); //cancels the post back.
                var currentZoomLevel = map.getZoom();
                map.setZoom(currentZoomLevel - 2); //zoom out two levels
            };    
     });   

})();
于 2011-11-02T12:29:29.350 回答