マップ内のマーカーの位置にリンクされた動的に作成されたdivを備えたサイドバーを備えたGoogleMAPを使用してページを作成しています。
JQueryとGoogleMapsAPIv3でASP.NETMVCを使用しています。
これがその外観です。
このページはスプラッシュウィンドウに読み込まれ、動的に生成されます。
バックグラウンドページで、ユーザーが入力フィールドに州または都市を入力し、コントローラーアクションで、そのエリアにいるすべての人を検索してJSONを返します。JSONを取得し、マップにマーカーを入力してから、サイドバーにdivのリストを作成します。
それらのdivに、クリックするとマップがマーカーの中央に配置される関数を追加したいと思います。
私はこの解決策のアイデアを思いつきましたが、それを終わらせることはできませんでした。
class="clickable"
属性「Lat」と「Lng」を、それらが関連するマーカーの値と等しい値で追加し、JQueryでクリックイベントを取得してから、マップの中心をそのLatとLngで次のように設定しようとしました。 :
$(".clickable div").click(function(){
$('map_canvas').panTo($(this).attr('lat'), $(this).attr('lng'));
}
このアプローチには2つの問題がありました。-まず、JQueryで地図を取得する方法がわかりませんでした。likeを使用して2つの方法を見つけまし$('map_canvas').gMap
たが、機能しませんでした。Stackoverflowで見つけたものをさらにいくつか試しましたが、機能しませんでした。
2番目-JQueryはDIVからのイベントクリックをキャッチしませんでした。Google ChromeコンソールでJQueryコードをテストしましたが、機能しましたが、コードがクリックをトリガーしませんでした。私はGoogleChromeのようなものを試し$(".clickable div").click(function(){ alert("test"); }
ましたが、うまくいきましたが、私のスクリプトではうまくいきませんでした。
また、コードでを使用してリスナーを追加しようとしaddDomListener
ましたが、それも回避できませんでした。
divがクリックされたときにマップを再作成せずにこれを行うための良い方法を教えてください。
また、divにLat属性とLng属性を追加するというアイデアも好きではありません。それがどのブラウザーでも機能するのか、それともその良い習慣なのかはわかりません。私はこれに対する解決策がありません。
これが私が使用しているコードです。(短くて読みやすくするために、一部を削除しました)
$(document).ready(function () {
//Google Maps API V3 - Prepares the ajaxForm options.
var options = {
beforeSubmit: showRequestPesquisaAdvogados,
success: showResponsePesquisaAdvogados,
type: 'post',
resetForm: false
};
$('#form-pesquisaAdvogado').ajaxForm(options);
//$(".clickable").click(function () { alert($(this).attr('lat')) });
});
function showRequestPesquisaAdvogados(formData, jqForm, options) {
$("#modal-processing-background").show(); //Shows processing splash window
}
function showResponsePesquisaAdvogados(responseText, statusText, xhr, $form) {
$("#modal-processing-background").hide();
//Hide processing window
loadSplashWindow();
CreateMap(responseText);
CreateSideBar(responseText);
}
}
function CreateMap(json) {
var mapOptions = {
center: new google.maps.LatLng(json[0].Endereco.Lat, json[0].Endereco.Lng),
zoom: 5,
mapTypeId: google.maps.MapTypeId.ROADMAP
// marker:true
};
var infoWindow = new google.maps.InfoWindow();
var map = new google.maps.Map(document.getElementById("map-result"), mapOptions);
for (i = 0; i < json.length; i++) {
var data = json[i]
var myLatlng = new google.maps.LatLng(data.Endereco.Lat, data.Endereco.Lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: data.Endereco.Logradouro
});
(function (marker, data) {
// Attaching a click event to the current marker
google.maps.event.addListener(marker, "click", function (e) {
// Prepare the infoWindows content.
var contentString = //my content;
infoWindow.setContent(contentString);
infoWindow.open(map, marker);
});
//here I tried to add the listener to the div.
google.maps.event.addDomListener($(".clickable")[i], 'click',
function () {
map.panTo(new google.maps.LatLng($(this).attr('lat'),
$(this).attr('lng')));
});
})(marker, data);
}
}
function CreateSideBar(json) {
$(".sideBarConteiner").empty();
for (i = 0; i < json.length; i++) {
var contentString =
"<div class='clickable' lat='" + data.Endereco.Lat +
"' lng='" + data.Endereco.Lng + "' >" +
//...div's content here
"</div>";
$(".sideBarConteiner").append(contentString);
}
}
コードをより良くしたり、より良い方法にするための提案があれば、私はプログラミングの経験が3か月しかないので、知らないうちに間違った方向に進んでいる可能性があります。より良い方法。
私の投稿は少し長いことを知っています、私はそれを明確にしたかっただけです。
よろしくお願いします。
よろしく、
セザール。