2

私はGmapsプログラミングの初心者です。

2つのタブを含むインフォウィンドウを作成したいと思います。1つは情報だけで、もう1つは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フォームがあるinfowindowに関連していると思います。ありがとう。

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

質問を単純化します。

情報ウィンドウに「ボタン」があるこの例を用意しました: 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 に答える