Карты Google v3. Информационное окно с вкладками jquery - PullRequest
2 голосов
/ 01 ноября 2011

Я новичок в программировании Gmaps.

Я хочу создать информационное окно, содержащее две вкладки, одна из которых просто с информацией, а другая с некоторой HTML-формой (кнопка и текст).

http://gmaps -samples-v3.googlecode.com / SVN / багажник / 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-формой внутри. Спасибо.

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

Я упрощу свой вопрос.

Я подготовил этот пример, где вы можете найти «кнопку» в информационном окне: http://www.sipa.es/prueba_fer/index_prueba.html

Как я могу связать действие с этой кнопкой? Например, изменение масштаба, открытие нового окна и т. Д.

Спасибо

1 Ответ

0 голосов
/ 02 ноября 2011

Маркерный объект имеет события перетаскивания :

  • drag: это событие многократно запускается, когда пользователь перетаскивает маркер.
  • 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('');  

});

UPDATE:

Хорошо, вам нужно убедиться, что вы ловите элементы в информационном окне, когда они присоединены к DOM. Информационные окна имеют событие 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
            };    
     });   

})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...